JVM 中新生代老年代在实际内存中存在吗

JVM 中新生代老年代在实际内存中存在吗?是设计的概念还是什么?

  • 这篇博客也许可以解决你的问题👉 :JVM学习----堆内存(新生代与老年代)
  • 除此之外, 这篇博客: JVM内存区域中的 G1 收集器(新生代 + 老年代) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • G1(Garbage-First),它是一款面向服务端应用的垃圾收集器,在多 CPU 和大内存的场景下有很好的性能。HotSpot 开发团队赋予它的使命是未来可以替换掉 CMS 收集器。

    使用复制 + 标记 - 整理算法收集新生代和老年代垃圾。

    G1 把堆划分成多个大小相等的独立区域(Region),新生代和老年代不再物理隔离。
     

    8.讲一下 CMS 垃圾收集器的四个步骤。CMS 有什么缺点?

    整个过程分为四个步骤:

    • 初始标记: 暂停所有的其他线程,并记录下直接与 root 相连的对象,速度很快 ;
    • 并发标记: 同时开启 GC 和用户线程,用一个闭包结构去记录可达对象。但在这个阶段结束,这个闭包结构并不能保证包含当前所有的可达对象。因为用户线程可能会不断的更新引用域,所以 GC 线程无法保证可达性分析的实时性。所以这个算法里会跟踪记录这些发生引用更新的地方。
    • 重新标记: 重新标记阶段就是为了修正并发标记期间因为用户程序继续运行而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段的时间稍长,远远比并发标记阶段时间短
    • 并发清除: 开启用户线程,同时 GC 线程开始对未标记的区域做清扫。

    有下面三个明显的缺点:

    • 对 CPU 资源敏感;
    • 无法处理浮动垃圾;
    • 它使用的回收算法-“标记-清除”算法会导致收集结束时会有大量空间碎片产生。

    9.G1 垃圾收集器的步骤。有什么缺点?

    • 初始标记
    • 并发标记
    • 最终标记
    • 筛选回收

    10.讲一下内存分配策略?