Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.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 为什么G1GC在开始混合收藏之前会缩减年轻一代?_Java_Garbage Collection_Heap Memory_G1gc - Fatal编程技术网

Java 为什么G1GC在开始混合收藏之前会缩减年轻一代?

Java 为什么G1GC在开始混合收藏之前会缩减年轻一代?,java,garbage-collection,heap-memory,g1gc,Java,Garbage Collection,Heap Memory,G1gc,当G1决定开始进行混合收集时,它会将我们的Eden空间从10g大幅缩减到1g左右 {GC调用前堆=294(完全0): 垃圾第一堆总计204800000K,已使用18304860K[0x00000002de000000,0x00000002de804e20,0x00000007c0000000) 区域大小8192K,1363名年轻人(11165696K),11名幸存者(90112K) 元空间使用37327K,容量37826K,提交38096K,保留1083392K 类空间已使用3935K,容量40

当G1决定开始进行混合收集时,它会将我们的Eden空间从10g大幅缩减到1g左右

{GC调用前堆=294(完全0):
垃圾第一堆总计204800000K,已使用18304860K[0x00000002de000000,0x00000002de804e20,0x00000007c0000000)
区域大小8192K,1363名年轻人(11165696K),11名幸存者(90112K)
元空间使用37327K,容量37826K,提交38096K,保留1083392K
类空间已使用3935K,容量4081K,提交4096K,保留1048576K
2016-03-31T20:57:31.002+0000:7196.427:[GC暂停(G1疏散暂停)(年轻)
所需幸存者大小717225984字节,新阈值1(最大值1)
-年龄1:41346816字节,总计41346816
7196.427:[G1工效学(CSet构造)开始选择CSet,_待定卡:144693,预测基准时间:48.88毫秒,剩余时间:951.12毫秒,目标暂停时间:1000.00毫秒]
7196.427:[G1工效学(CSet构造)向CSet添加年轻区域,伊甸园:1352个区域,幸存者:11个区域,预测年轻区域时间:20.72毫秒]
7196.427:[G1工效学(CSet构造)完成选择CSet,伊甸园:1352个区域,幸存者:11个区域,旧的:0个区域,预测暂停时间:69.60毫秒,目标暂停时间:1000.00毫秒]
7196.494:[G1工效学(混合地面军事系统)启动混合地面军事系统,原因:候选旧区域可用,候选旧区域:789个区域,可回收:4703761904字节(22.43%),阈值:5.00%]
,0.0673540秒]
[并行时间:60.1 ms,GC工作人员:18]
[GC工作程序启动(毫秒):最小值:7196427.8,平均值:7196428.1,最大值:7196428.2,差值:0.4]
[外部根扫描(毫秒):最小值:7.3,平均值:7.5,最大值:7.7,差异:0.4,总和:134.2]
[更新RS(ms):最小值:28.2,平均值:28.8,最大值:29.9,差异:1.7,总和:518.4]
[已处理缓冲区:最小值:41,平均值:57.7,最大值:80,差异:39,总和:1039]
[扫描RS(ms):最小值:0.1,平均值:0.2,最大值:0.5,差值:0.4,总和:3.7]
[代码根扫描(ms):最小值:0.0,平均值:0.0,最大值:0.0,差异:0.0,总和:0.1]
[对象副本(毫秒):最小值:22.1,平均值:23.1,最大值:23.4,差异:1.3,总和:416.2]
[终端(毫秒):最小值:0.0,平均值:0.0,最大值:0.0,差异:0.0,总和:0.1]
[终止尝试:最小值:1,平均值:1.0,最大值:1,差异:0,总和:18]
[GC工作人员其他(ms):最小值:0.0,平均值:0.1,最大值:0.2,差异:0.2,总和:2.5]
[GC工作人员总数(ms):最小值:59.5,平均值:59.7,最大值:60.0,差异:0.5,总和:1075.1]
[GC工作端(ms):最小值:7196487.7,平均值:7196487.8,最大值:7196487.9,差值:0.2]
[代码根修复:0.2毫秒]
[代码根清除:0.0毫秒]
[清晰CT:1.9毫秒]
[其他:5.2毫秒]
[选择CSet:0.0毫秒]
[参考程序:0.5毫秒]
[参考Enq:0.0毫秒]
[信用卡:0.5毫秒]
[超大寄存器:0.2毫秒]
[大量回收:0.1毫秒]
[免费CSet:2.3毫秒]
[伊甸园:10.6G(10.6G)->0.0B(848.0M)幸存者:88.0M->152.0M堆:17.5G(19.5G)->7128.3M(19.5G)]
GC调用后的堆=295(完全0):
垃圾第一堆总计204800000K,已使用7299344K[0x00000002de000000,0x00000002de804e20,0x00000007c0000000)
区域大小8192K,19名年轻人(155648K),19名幸存者(155648K)
元空间使用37327K,容量37826K,提交38096K,保留1083392K
类空间已使用3935K,容量4081K,提交4096K,保留1048576K
}
[次数:用户=1.09系统=0.00,实际=0.07秒]
2016-03-31T20:57:31.070+0000:7196.495:应用程序线程停止的总时间:0.0699324秒,停止线程的时间:0.0003462秒
这是在它与10-11g伊甸园一起运行了60个或更多系列之后

下面是我们运行时使用的适当的JVM GC参数

-xms2000m-Xmx20000m
-XX:+UseG1GC
-XX:G1RSetUpdatingPauseTimePercent=5
-XX:maxgc=1000
-XX:GCTimeRatio=99
-XX:InitiatingHeapOccupancyPercent=35
-XX:MaxTenuringThreshold=1
-XX:G1concentRefinementThreads=6
-XX:congcthreads=18
-XX:ParallelGCThreads=18
-XX:+PrintGCDetails”
-XX:+PrintGCDateStamps”
-XX:+PrintHeapAtGC”
-XX:+PrintTenuringDistribution”
-XX:+PrintGCApplicationStoppedTime”
-XX:+PrintPromotionFailure“
-XX:+PrintAdaptiveSizePolicy”
根据,它需要调整Eden的大小,以便max pause target占据整个堆,而不仅仅是新一代的堆。为什么收集器如此激进


对于10g的堆大小,年轻一代的平均暂停时间在50-150ms之间。如果演示是正确的(我还没有找到任何其他支持该陈述的内容),我预计会减少一半(20g堆),而不是10倍。

您可以在第56张幻灯片中找到查询的答案

年轻一代减少了20倍

因此,缩小10倍的工厂规模并不奇怪

Monica Beckwith的文章提供了调优G1GC的技巧:

通过让托儿所/年轻人收缩到默认的最小值(占总Java堆的5%),可以避免完全GC

由于未明确设置年轻发电机的大小,因此默认值为

-XX:G1NewSizePercent=5
设置堆的百分比以用作年轻代大小的最小值

所以要尊重你的暂停时间目标

-XX:MaxGCPauseMillis=1000 
年轻一代可以收缩到总堆的5%

我在google上找到了一篇关于G1GC的好文章

如果G1预测的暂停时间目标大于目标暂停时间目标,则收缩年轻一代,但不超过当前Java堆大小的G1NewSizePercent(而不是最大大小)。同样,总体Java堆将根据计算的GC时间比与GCTimeRatio的值进行增长(或收缩)

注意:G1NewSizePercent和G1MaxNewSizePercent不能与NewSize或MaxNewSize混淆

G1NewSizePercent和G1MaxNewSizePercent分别给出了G1所能容纳的年轻一代的大小的下限和上限

另一方面,您配置了许多参数,如果大多数默认的p