Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.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 - Fatal编程技术网

Java垃圾收集-新阈值

Java垃圾收集-新阈值,java,garbage-collection,Java,Garbage Collection,我假设年轻一代中的对象在升级到老一代或终身一代之前必须存活15个小GC(最大15个) 新阈值意味着什么?它如何影响JVM年轻一代GC或次要GC 这是否意味着年轻一代不够大,JVM无法对对象执行15次GC 在下面的示例中,新阈值为10。这是否意味着我必须增加堆的大小,或者特别是对年轻一代 Desired survivor size 121634816 bytes, new threshold 10 (max 15) PSAdaptiveSizePolicy::compute_eden_space_

我假设年轻一代中的对象在升级到老一代或终身一代之前必须存活15个小GC(最大15个)

新阈值意味着什么?它如何影响JVM年轻一代GC或次要GC

这是否意味着年轻一代不够大,JVM无法对对象执行15次GC

在下面的示例中,新阈值为10。这是否意味着我必须增加堆的大小,或者特别是对年轻一代

Desired survivor size 121634816 bytes, new threshold 10 (max 15)
PSAdaptiveSizePolicy::compute_eden_space_size: costs minor_time: 0.004921 major_cost: 0.047628 mutator_cost: 0.947450 throughput_goal: 0.990000 live_space: 330899520 free_space: 1115684864 old_eden_size: 419430400 desired_eden_size: 436207616
AdaptiveSizePolicy::survivor space sizes: collection: 28 (125829120, 113246208) -> (125829120, 121634816) 
AdaptiveSizeStop: collection: 28 
[PSYoungGen: 421856K->10080K(532480K)] 785165K->373389K(1269760K), 0.0312765 secs] [Times: user=0.25 sys=0.00, real=0.03 secs] 
2018-07-04T02:09:01.886+0800: 359.263: [GC (Allocation Failure) AdaptiveSizePolicy::update_averages:  survived: 4587536  promoted: 0  overflow: false
AdaptiveSizeStart: 359.286 collection: 29 
  avg_survived_padded_avg: 111951304.000000  avg_promoted_padded_avg: 43516000.000000  avg_pretenured_padded_avg: 41.070663  tenuring_thresh: 11  target_size: 113246208

年轻一代被分为三个区域:一个伊甸园空间和两个幸存者空间。大多数对象(非常大的对象将是例外)是使用简单(快速)的指针碰撞方法在Eden空间中分配的。当指针到达Eden空间的末尾时,需要进行一次较小的GC。与其直接将所有对象升级到旧gen中,不如允许它们在幸存者空间中放置一段时间,以使它们成为垃圾的时间更长,并减少旧gen收集的负载

有两个幸存者空间;一个是“from”空间(当前包含对象),另一个是“to”空间(实际上是空的)。来自Eden的实时数据将被复制到“收件人”空间以及“发件人”空间中仍处于活动状态且未达到新阈值的任何对象。然后,两个幸存者空间的角色颠倒(“to”变为“from”,“from”变为“to”),为下一次次要GC做好准备

幸存者空间中已达到新阈值(通常称为寿命)的对象将升级到旧代

显然,如果您的应用程序分配对象的速度快于幸存者空间可以处理的速度,那么GC将更快地升级对象。影响这一点的参数是MaxTenuringThreshold,它是一个最大值,而不是一个确定值

可以使用各种参数调整区域的大小。请阅读以下内容以了解更多详细信息:


除非您遇到GC问题,否则您不应该追求实现级别的统计信息,它应该是自调优的