四、JVM分代收集理论

当前商业虚拟机的垃圾收集器,大多数都遵循了“分代收集”(Generational Collection)的理论进行设计,所谓分代,就是将Java堆划分出不同的区域,然后将回收对象依据其年龄(年龄即对象熬过垃圾收集过程的次数)分配到不同的区域之中存储。分代的目的是垃圾收集器可以更快的收集“死掉”的对象。 如何判定对象已死?请参考 https://cloud.tencent.com/developer/article/1694697

HotSpot JVM 将堆分为年轻代(Young Generation)和老年代(Old Generation)两个区域

  • 新生代收集(Minor GC/Young GC):指目标只是新生代的垃圾收集。
  • 老年代收集(Major GC/Old GC):指目标只是老年代的垃圾收集。目前只有CMS收集器会有单独收集老年代的行为。另外请注意“Major GC”这个说法现在有点混淆,在不同资料上常有不同所指,读者需按上下文区分到底是指老年代的收集还是整堆收集。
  • 混合收集(Mixed GC):指目标是收集整个新生代以及部分老年代的垃圾收集。目前只有G1收集器会有这种行为。
  • 整堆收集(Full GC):收集整个Java堆和方法区的垃圾收集。

年轻代分为了三部分:1个Eden区和2个Survivor区(分别叫from和to)。默认比例为8:1

处理流程:

  1. 判断该对象是否是大对象,大对象直接进入老年代
  2. 如果不是大对象,会存储在Eden区。To survivor是空的
  3. 执行GC , Eden和From survivor区中存活下来的对象存在To survivor区
  4. From survivor和To survivor调换身份。这样To survivor又是空的了。
下一篇
举报

扫码关注云+社区

领取腾讯云代金券