我在JDK8中设置了-XX: LaunatingHeap占领百分比=70(没有自适应IHOP功能),但是我发现当Heap占领百分比远小于70%时,JVM开始时有两个初始标记阶段,是否有其他因素会触发G1 GC初始标记阶段?提前谢谢!
GC日志摘录:
2020-01-22T03:58:14.227 0000: 3.158:[GC暂停(元数据GC阈值)(年轻)(初始标记),0.1583711 ses][Eden:1056.0M(81920.0M)-
2020-01-22T04:13:07.073 0000:896.004:[GC暂停(G1疏散暂停)(年轻)(初始标记),3.8512514秒][Eden:81184.0M(81184.0M)-
JDK版本:
openjdk版本"1.8.0_222"
OpenJDK运行时环境(build 1.8.0_222-b10)
OpenJDK 64位服务器虚拟机(构建25.222-b10,混合模式)
谢啦
******更新2020/02/01 GC日志************
2020-01-22T03:58:14.227 0000: 3.158:[GC暂停(元数据GC阈值)(年轻)(初始标记),0.1583711秒]
[并行时间:143.8 ms,GC工作器:33]
[GC Worker Start (ms): Min: 3158.7, Avg: 3159.4, Max: 3159.8, Diff: 1.1]
[Ext Root Scanning (ms): Min: 0.6, Avg: 1.1, Max: 2.7, Diff: 2.1, Sum: 35.9]
[Update RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.1]
[Processed Buffers: Min: 0, Avg: 0.1, Max: 2, Diff: 2, Sum: 4]
[Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.2]
[Code Root Scanning (ms): Min: 0.0, Avg: 0.3, Max: 5.9, Diff: 5.9, Sum: 8.5]
[Object Copy (ms): Min: 135.7, Avg: 141.1, Max: 141.5, Diff: 5.9, Sum: 4654.7]
[Termination (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.7]
[Termination Attempts: Min: 1, Avg: 9.1, Max: 15, Diff: 14, Sum: 301]
[GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.1, Sum: 0.9]
[GC Worker Total (ms): Min: 142.0, Avg: 142.5, Max: 143.1, Diff: 1.1, Sum: 4701.0]
[GC Worker End (ms): Min: 3301.8, Avg: 3301.9, Max: 3301.9, Diff: 0.1]
[代码根修复:0.1毫秒]
[代码根清除:0.0毫秒]
[String Dedup Fixup:0.9 ms,GC Worker:33]
[Queue Fixup (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
[Table Fixup (ms): Min: 0.0, Avg: 0.0, Max: 0.7, Diff: 0.7, Sum: 0.7]
[清晰CT:0.4毫秒]
[其他:13.1 ms]
[Choose CSet: 0.0 ms]
[Ref Proc: 9.4 ms]
[Ref Enq: 0.9 ms]
[Redirty Cards: 0.6 ms]
[Humongous Register: 0.2 ms]
[Humongous Reclaim: 0.0 ms]
[Free CSet: 0.1 ms]
[Eden:1056.0M(81920.0M)-
[次数:用户=1.77 sys=2.98,实际=0.15秒]
2020-01-22T03:58:14.386 0000:3.316:[GC并发根区域扫描开始]
2020-01-22T03:58:14.458 0000:3.388:[GC并发标记开始]
2020-01-22T03:58:14.458 0000:3.388:[GC并发根区域扫描结束,0.0718879秒]
2020-01-22T03:58:14.485 0000:3.416:[GC备注2020-01-22T03:58:14.485 0000:3.416:[Finalize Marking,0.0011542 secs]2020-01-22T03:58:14.486 0000:3.417:[GC ref proc,0.0072547 secs]2020-01-22T03:58:14.494 0000:3.424:[Unload,0.0050159 secs],0.0151448 secs]
[次数:用户=0.19 sys=0.02,实值=0.02秒]
2020-01-22T03:58:14.485 0000:3.415:[GC并发标记结束,0.0271495秒]
2020-01-22T03:58:14.500 0000:3.431:[GC清理1259M]-
[时间:用户=0.06系统=0.00,实际=0.00秒]
2020-01-22T04:13:07.073 0000:896.004:[GC暂停(G1疏散暂停)(年轻)(初始标记),3.8512514秒]
[并行时间:3822.9毫秒,GC工作人员:33]
[GC Worker Start (ms): Min: 896005.5, Avg: 896006.2, Max: 896006.6, Diff: 1.1]
[Ext Root Scanning (ms): Min: 4.3, Avg: 5.3, Max: 8.4, Diff: 4.1, Sum: 175.2]
[Update RS (ms): Min: 0.0, Avg: 0.2, Max: 0.8, Diff: 0.8, Sum: 7.6]
[Processed Buffers: Min: 0, Avg: 1.3, Max: 6, Diff: 6, Sum: 44]
[Scan RS (ms): Min: 2254.9, Avg: 2266.4, Max: 2268.2, Diff: 13.3, Sum: 74790.0]
[Code Root Scanning (ms): Min: 0.0, Avg: 0.7, Max: 10.4, Diff: 10.4, Sum: 23.8]
[Object Copy (ms): Min: 1535.2, Avg: 1537.7, Max: 1548.1, Diff: 13.0, Sum: 50745.7]
[Termination (ms): Min: 0.0, Avg: 11.2, Max: 13.3, Diff: 13.2, Sum: 368.0]
[Termination Attempts: Min: 1, Avg: 2270.1, Max: 2464, Diff: 2463, Sum: 74914]
[GC Worker Other (ms): Min: 0.0, Avg: 0.2, Max: 0.5, Diff: 0.5, Sum: 8.1]
[GC Worker Total (ms): Min: 3821.2, Avg: 3821.8, Max: 3822.5, Diff: 1.3, Sum: 126118.4]
[GC Worker End (ms): Min: 899827.7, Avg: 899827.9, Max: 899828.2, Diff: 0.5]
[代码根修复:0.5 ms]
[代码根清除:0.1 ms]
[字符串重复数据消除修复:1.1毫秒,GC工作人员:33]
[Queue Fixup (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
[Table Fixup (ms): Min: 0.0, Avg: 0.1, Max: 1.0, Diff: 1.0, Sum: 1.9]
[清晰CT:4.7 ms]
[其他:21.9 ms]
[Choose CSet: 0.0 ms]
[Ref Proc: 8.5 ms]
[Ref Enq: 0.9 ms]
[Redirty Cards: 4.1 ms]
[Humongous Register: 0.2 ms]
[Humongous Reclaim: 0.0 ms]
[Free CSet: 6.2 ms]
[Eden:81184.0M(81184.0M)-
[次数:用户=50.77 sys=10.33,实际=3.85秒]
其中一个很明显,它与Metaspace
有关,这里有更多关于它的细节。我的意思是当触发Full GC时,初始阶段是mark
。
我知道还有3种情况会触发标记阶段(如下所示):
1) IHOP is reached
2) G1ReservePercent is reached
3) a humongous allocation happens
标记阶段后发生的情况取决于几个参数,例如mixed GCs
将取决于G1HeapWastePercent
参数;但无论如何,young GC
都会在mark阶段之后触发。
第一点是,一个庞大的分配可能会启动一个并发循环,你可以分析自己是否以及何时会这样做。
第二点(来自你的评论):我的意思是,一般来说,这是导致同时标记阶段被触发的原因,而不是针对你的具体案例。
但让我们看看你的日志(我稍微格式化了一下):
[GC pause (G1 Evacuation Pause) (young) (initial-mark), 3.8512514 secs]
[ Eden: 81184.0M(81184.0M)->0.0B(71904.0M)
Survivors: 736.0M->10016.0M
Heap: 83643.5M(160.0G)->11744.0M(160.0G)
]
这显示了几件事。你的伊甸园是
80GB
,70GB
其中哪里死的对象。作为这样的伊甸园
被简化为71904.0M
和幸存者
被制作得更大到10016 M
。由于你已经设置了发起堆占用百分比=70
,当伊甸园那么大时,这永远不会发生,这个值永远不会达到70%。想想看,你说:“当我在旧一代占总堆的70%时发起标记阶段”;但你的伊甸园是堆的50%...那只是这里的一个小观察。
至于触发的原因——这很明显:你的伊甸园已经满了(
81184.0M(81184.0M)
)。至于为什么初始标记
?它总是作为年轻系列的一部分触发。
第三点
我不太明白你的意思。它在日志中明确指出,
初始标记
,这是一个STW事件
,它执行一个年轻GC
。
本文向大家介绍render在什么时候会被触发?相关面试题,主要包含被问及render在什么时候会被触发?时的应答技巧和注意事项,需要的朋友参考一下 在 React 中,只要执行了 setState 方法,就一定会触发 render 函数执行; 组件的 props 改变了,不一定触发 render 函数的执行,除非 props 的值来自于父组件或者祖先组件的 state
用j7u5,G1GC 对于给定的性能测试,可以预见,我的应用程序在运行5小时后会出现长时间的暂停。除了这个大的(也是唯一的),还有小的初始标记阶段。 任何建议来弄清楚这个长暂停发生了什么,以及如何调整它以避免影响延迟目标(百分位数98%, 99.999%)的如此长的暂停?
问题内容: 块内初始化之间有什么区别: 以及单独的静态初始化: 问题答案: 静态初始化块允许更复杂的初始化,例如使用条件: 或者,当需要的不仅仅是构造时:使用构建器创建实例时,除了创建静态字段之外,还必须进行异常处理或其他工作。 静态初始化块也在内联静态初始化器之后运行,因此以下内容有效:
问题内容: 在我的Android应用程序中,我有一个奇怪的错误。像下面这样的实例变量在运行时意外分配给它的默认值(在这种情况下为false)。何时在Android活动中初始化此类变量? 问题答案: 创建实例时,将初始化Java中的实例变量。 大多数情况下,对象会使用实例化。 对于活动,它们由Android框架使用反射实例化(请参阅参考资料)。然后执行的初始化,并在实例上调用活动。 有关详细信息,请
问题内容: 我在服务器上运行批处理作业时遇到问题,而在开发工作站上的Eclipse上运行良好。 我已经使用Roo设置了Spring环境,创建了一个实体,并进行了一些工作,并在我的develompent盒上对其进行了良好的测试。我初始化上下文并完成工作,但是当我在服务器上运行批处理时,上下文未正确初始化。这是代码: 这是日志和异常: 关于发生了什么任何想法或提示吗?我的类路径设置为$ PROJECT
我想知道为什么输出值0。我认为如果一个变量没有初始化,它会输出一个垃圾值。 但是,我还记得听到整数的默认值为0,所以我有点困惑。 谢谢