https://www.bilibili.com/video/BV1S44y1z7on
根据对象的生命周期将内存划分,然后进行分区管理。当前商业虚拟机的垃圾收集器,大多数遵循了“分代收集” (Generational Collection)的理论进行设计。分代收集名为理论,实质是一套符合大多数程序运行实际情况的经验法则,它建立在两个非代假说纸上:
1)弱分代假说(Weak Generational Hypothesis):绝大多数对象都是朝生夕灭的。
2)强分代假说(Strong Generational Hypothesis):熬过越多次垃圾收集过程的对象就越难以消亡。
在 Java 堆划分出不同的区域之后,垃圾收集器才可以每次只回收其中某一个或者某些部分的区域,因此就有了”Minor GC” “Major GC” “Full GC” 这样的回收类型的划分;堆划分了区域才能针对不同的区域安排与里面存储对象存亡特征相匹配的垃圾收集算法。
为避免混淆,针对不同分代的类似名称在这里统一定义:
Minor GC触发条件:
当Eden区满时 触发Minor GC,Minor GC会引发STW(stop the world);
Full GC触发条件:
(1)调用 System.gc 时,系统建议执行 Full GC,但是不必然执行 (2)老年代空间不足 (3)方法区空间不足 (4)通过 Minor GC 后进入老年代的平均大小大于老年代的可用内存。