Young区与YGC

Young区

          这里写图片描述
  Young区被划分为一个Eden区和两个Survivor区。Eden区存放新创建的对象,一个Survivor区存放YGC后存活的对象,另一个为空。

为什么分区?

  原因:让真正长期存活的对象进入Old区,降低FGC频率。如果不分区,Young区一旦被占满就触发YGC,存活对象进入Old区,即只要能经历一次YGC即可进入Old区,增加了FGC频率。

为什么存在两个Survivor区?

  原因:减少内存碎片,提升YGC效率。Young区采用复制算法提升YGC性能,如果只有一个Survivor区,Eden区存活的对象被拷贝到Survivor区,但是Survivor区存活的对象,只有两种选择,要么进入Old区,要么采用标记-清除/清理算法,可惜无论采用哪种方法效率都不高。因此,产生了一个空的Survivor区,以便Survivor区存活的对象能够被复制到该区,提升YGC效率。

SurvivorRatio对GC的影响?

  SurvivorRatio = Eden大小/一个Survivor大小;

  1. Young区大小一定时,Eden增加,YGC频率降低,YGC持续时间增加,Survivor减小,Survivor溢出概率变大,FGC频率增加,FGC持续时间不变;
  2. Young区大小一定时,Eden减小,YGC频率增加,YGC持续时间降低,Survivor变大,对象晋升概率变大,FGC频率增加,FGC持续时间不变;

SurvivorRatio的合理值?

  如果SurvivorRatio设置合理,不会发生SurvivorRatio溢出,且只有极少对象的存活周期达到晋升阈值,晋升到Old区。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部