08 新生代和老年代

1. 新生代和老年代的区别?
  • 新生代:一般占据堆的 1/3 空间。用来存放新生的对象,新生代对象朝生夕死,对象存活率低,新生代MinorGC非常频繁,一般回收速度也比较快。新生代常采用 复制算法。
  • 老年代:主要存放应用程序中生命周期长的内存对象。老年代对象存活率高。老年代MajorGC经常会伴随至少一次的 MinorGC,老年代MajorGC 的速度比较慢。老年代常采用的 标记-清除算法和标记-整理算法。
2. 什么样能够从新生代到达老年代?
  • Eden区满时,进行Minor GC,当Eden和一个Survivor区中依然存活的对象无法放入到另一个Survivor区中时,则通过分配担保机制提前转移到老年代中。
  • 若新创建的对象体积太大, 新生代无法容纳这个对象,就会绕过新生代, 直接在老年代分配, 只对Serial及ParNew两款收集器有效。
  • 长期存活的对象将进入老年代。虚拟机对每个对象定义了一个对象年龄(Age)计数器。当年龄增加到一定的临界值时,就会晋升到老年代中。
3. Minor GC 和 Full GC 的含义及区别?

Minor GC(新生代GC):指发生在新生代的垃圾收集动作,新生代中的对象朝生夕死,所以 Minor GC 非常频繁,回收速度也比较快。
Full GC(老年代GC):指发生在老年代的GC,速度一般比 Minor GC 慢十倍以上。如果有Full,说明这次GC发生了Stop-The-World。

4. 什么情况下会出现新生代GC(MinorGC/YoungGC)

对象优先在新生代 Eden 区中分配,如果 Eden 区没有足够的空间时,就会触发一次 Young GC 。

5. 什么情况下出现老年代GC(MajorGC/FullGC)
  1. 调用 System.gc() 方法时,会建议JVM进行Full GC,此方法不建议使用。
  2. 如果创建一个大对象,Eden区域当中放不下这个大对象,会直接保存在老年代当中,如果老年代空间也不足,就会触发Full GC。
  3. 新生代使用的是复制算法,为了内存利用率,只使用其中一个 Survivor 空间来做轮换备份,因此如果大量对象在 Minor GC 后仍然存活,导致 Survivor 空间不够用,就会通过分配担保机制,将多出来的对象提前转到老年代,此时如果老年代的可用内存小于该对象的大小,就会触发 Full GC。
  4. 当老年代中最大可用的连续空间小于历代晋升到老年代的对象的平均大小时,会触发Full GC 来让老年代腾出更多的空间。
6. 什么时候对象进入老年代?
  1. 大对象直接进入老年代。 虚拟机提供了一个阈值参数,令大于这个设置值的对象直接在老年代中分配。如果大对象进入新生代,新生代采用的复制算法收集内存,会导致在Eden区和两个Survivor区之间发生大量的内存复制,应该避免这种情况。
  2. 长期存活的对象进入老年代。 虚拟机给每个对象定义了一个对象年龄计数器,对象在Eden出生,经过一次Minor GC后仍然存活,并且能被Survivor容纳的话,将被移动到Survivor空间中,此时对象年龄设为1。然后对象在Survivor区中每熬过一次 Minor GC,年龄就增加1,当年龄超过设定的阈值时,就会被晋升到老年代中。
  3. 动态对象年龄判定: 如果在 Survivor 空间中所有相同年龄的对象,大小总和大于 Survivor 空间的一半,那么年龄大于或等于该年龄的对象就直接进入老年代,无须等到阈值中要求的年龄。
  4. 空间分配担保: 如果老年代中最大可用的连续看空间大于新生代所有对象的总空间,那么 Minor GC 是安全的。如果老年代中最大可用的连续空间大于历代晋升到老年代的对象的平均大小,就进行一次有风险的 Minor GC,如果小于平均值,就进行 Full GC 来让老年代腾出更多的空间。因为新生代使用的是复制算法,为了内存利用率,只使用其中一个 Survivor 空间来做轮换备份,因此如果大量对象在 Minor GC 后仍然存活,导致 Survivor 空间不够用,就会通过分配担保机制,将多出来的对象提前转到老年代,但老年代要进行担保的前提是自己本身还有容纳这些对象的剩余空间,由于无法提前知道会有多少对象存活下来,所以取之前每次晋升到老年代的对象的平均大小作为经验值,与老年代的剩余空间做比较。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值