Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么是长寿命对象?_Java_Garbage Collection_G1gc - Fatal编程技术网

Java 什么是长寿命对象?

Java 什么是长寿命对象?,java,garbage-collection,g1gc,Java,Garbage Collection,G1gc,我被告知不要创建太多长寿命对象以获得更好的gc性能。因为长寿命的对象将被移动到旧版本,而在旧版本中收集对象的成本更高 但是长寿意味着什么呢?100毫秒太长了吗?10秒钟怎么样 我的应用程序使用15G堆内存并使用G1 gc,我找不到诸如“将对象移动到旧代需要多长时间”之类的配置寿命阈值是对象在升级到旧代之前能够在年轻代集合中存活的次数。可以使用以下配置: -XX:InitialTenuringThreshold:初始有效期阈值(默认值为7) -XX:MaxTenuringThreshold:最大

我被告知不要创建太多长寿命对象以获得更好的gc性能。因为长寿命的对象将被移动到旧版本,而在旧版本中收集对象的成本更高

但是长寿意味着什么呢?100毫秒太长了吗?10秒钟怎么样


我的应用程序使用15G堆内存并使用G1 gc,我找不到诸如“将对象移动到旧代需要多长时间”之类的配置寿命阈值是对象在升级到旧代之前能够在年轻代集合中存活的次数。可以使用以下配置:

  • -XX:InitialTenuringThreshold:初始有效期阈值(默认值为7)
  • -XX:MaxTenuringThreshold:最大有效期阈值(并行收集器的默认值为15,CMS的默认值为4)
  • -XX:+PrintTenuringDistribution:打印使用年限信息

寿命阈值是对象在升级到旧代之前能够在年轻代集合中存活的次数。可以通过以下配置:

  • -XX:InitialTenuringThreshold:初始有效期阈值(默认值为7)
  • -XX:MaxTenuringThreshold:最大有效期阈值(并行收集器的默认值为15,CMS的默认值为4)
  • -XX:+PrintTenuringDistribution:打印使用年限信息

长寿命对象是在足够小的集合中幸存下来并“移动”到老一代的对象

在第一次GC中,活动对象从新一代移动到幸存者空间。 然后,经过几次地面军事训练后,他们被授予旧空间的终身教职

如图所示,gc对象在被保留之前存活的数量取决于幸存者空间的大小

在每次GC中,JVM都会确定一个对象在被保留之前可以被复制的次数,称为保留阈值。选择此阈值以保持幸存者空间半满


如果您想拥有更多的控制权,可以使用JVM参数XX:MaxTenuringThreshold长寿命对象是在足够小的集合中存活下来并“移动”到旧一代的对象

在第一次GC中,活动对象从新一代移动到幸存者空间。 然后,经过几次地面军事训练后,他们被授予旧空间的终身教职

如图所示,gc对象在被保留之前存活的数量取决于幸存者空间的大小

在每次GC中,JVM都会确定一个对象在被保留之前可以被复制的次数,称为保留阈值。选择此阈值以保持幸存者空间半满


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

不要围绕这样的口号设计应用程序。只要需要,就保留对象。此建议的唯一结果应该是,您不应将对象保留得过长,例如,不要尝试缓存或重用普通对象。不要围绕这样的口号设计应用程序。只要需要,就保留对象。此建议的唯一结果应该是,您不应将对象保留得过长,例如,不要尝试缓存或重用普通对象。