Java gc - 什么是长期存在的对象?

时间:2018-06-11 08:26:29

标签: java garbage-collection g1gc

我被告知不要创建太多长寿命对象以获得更好的gc性能。因为长寿命的物体将被移动到旧的。收集旧版本的物品会更加昂贵。

但长寿是什么意思呢? 100毫秒太长了吗?那10秒呢?

我的应用需要15G堆内存并使用G1 gc,我无法找到一些配置,例如将对象移动到旧版本的时间长度

2 个答案:

答案 0 :(得分:2)

终身临界值是对象在被提升为旧类之前可以在年轻的gen集合中存活的次数。这可以使用这些options

进行配置
  • -XX:InitialTenuringThreshold:初始终身期限(默认为7)。
  • -XX:MaxTenuringThreshold:最大期限阈值(并行收集器的默认值为15,CMS的默认值为4)。
  • -XX:+ PrintTenuringDistribution:打印终身年龄信息。

答案 1 :(得分:1)

长寿命对象是能够在较小的集合中存活并且被“移动”到旧代的对象。

在第一次GC时,活动对象从新一代移动到幸存者空间。 然后,经过一些gcs之后,他们就会在旧空间中度过。

如此处survivor doc所示,gc对象在终身之前存活的数量取决于幸存者的空间大小。

  

在每个GC上,JVM确定对象在终止之前可以复制的次数,称为终身临界阈值。选择此阈值是为了使幸存者空间保持半满。

如果您想获得更多控制权,可以使用JVM参数XX:MaxTenuringThreshold