Java垃圾收集-新阈值
我假设年轻一代中的对象在升级到老一代或终身一代之前必须存活15个小GC(最大15个) 新阈值意味着什么?它如何影响JVM年轻一代GC或次要GC 这是否意味着年轻一代不够大,JVM无法对对象执行15次GC 在下面的示例中,新阈值为10。这是否意味着我必须增加堆的大小,或者特别是对年轻一代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_
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问题,否则您不应该追求实现级别的统计信息,它应该是自调优的