Java 使用ParallelOld GC禁用类卸载
我的应用程序使用ParallelOld GC,在使用JMC分析应用程序时,我看到在类卸载上花费了相当多的时间。例如Java 使用ParallelOld GC禁用类卸载,java,garbage-collection,Java,Garbage Collection,我的应用程序使用ParallelOld GC,在使用JMC分析应用程序时,我看到在类卸载上花费了相当多的时间。例如 Event Type Name Duration (ns) GC Phase Pause GC Pause 191,864,741 GC Phase Pause Level 1 pre compact 18,946 GC P
Event Type Name Duration (ns)
GC Phase Pause GC Pause 191,864,741
GC Phase Pause Level 1 pre compact 18,946
GC Phase Pause Level 1 marking phase 140,394,856
GC Phase Pause Level 2 par mark 40,388,459
GC Phase Pause Level 2 reference processing 1,073,803
GC Phase Pause Level 3 SoftReference 756,766
GC Phase Pause Level 3 WeakReference 61,320
GC Phase Pause Level 3 FinalReference 238,764
GC Phase Pause Level 3 PhantomReference 6,014
GC Phase Pause Level 3 JNI Weak Reference 6,629
GC Phase Pause Level 2 class unloading 98,902,975 <=========
GC Phase Pause Level 1 summary phase 6,858
GC Phase Pause Level 1 adjust roots 15,803,657
GC Phase Pause Level 1 compaction phase 34,518,114
GC Phase Pause Level 2 drain task setup 1,672
GC Phase Pause Level 2 dense prefix task setup 1,816
GC Phase Pause Level 2 steal task setup 234
GC Phase Pause Level 2 par compact 34,206,466
GC Phase Pause Level 2 deferred updates 1,624
GC Phase Pause Level 1 post compact 890,295
事件类型名称持续时间(ns)
GC相位暂停GC暂停191864741
GC阶段暂停1级预压缩18946
GC阶段暂停级别1标记阶段140394856
GC相位暂停水平2 PAR标记40388459
GC阶段暂停2级参考处理1073803
GC相位暂停3级软件参考756766
GC相位暂停级别3 WeakReference 61320
GC阶段暂停级别3最终参考238764
GC阶段暂停级别3幻影参考6014
GC相位暂停3级JNI弱参考6629
GC阶段暂停级别2类卸载98902975您可以尝试:
-Xnoclassgc
禁用类的垃圾收集(GC)。这可以节省一些GC时间,从而缩短应用程序运行期间的中断。当您在启动时指定-Xnoclassgc时,应用程序中的类对象将在GC期间保持不变,并且将始终被视为活动的
这会导致更多内存被永久占用,如果不小心使用,将引发内存不足异常。
或者,要考虑内存大小,请增加MetaspaceSize-XX:MetaspaceSize=64m
当类元数据使用量达到MetaspaceSize时(32位客户端VM上为12字节,64位VM上为32位服务器VM上为16字节,具有更大的大小),会引发垃圾收集来收集失效的类加载器和类
来源您可以尝试:
-Xnoclassgc
禁用类的垃圾收集(GC)。这可以节省一些GC时间,从而缩短应用程序运行期间的中断。当您在启动时指定-Xnoclassgc时,应用程序中的类对象将在GC期间保持不变,并且将始终被视为活动的
这会导致更多内存被永久占用,如果不小心使用,将引发内存不足异常。
或者,要考虑内存大小,请增加MetaspaceSize-XX:MetaspaceSize=64m
当类元数据使用量达到MetaspaceSize时(32位客户端VM上为12字节,64位VM上为32位服务器VM上为16字节,具有更大的大小),会引发垃圾收集来收集失效的类加载器和类
sources我尝试过-Xnoclassgc,但没有成功:“类卸载”阶段仍然存在于配置文件中,并且仍然占据了总GC时间的很大一部分…我很惊讶,Xnoclassgc不能与CMSClassUnloadingEnabled一起使用(当指定-Xnoclassgc或-XX:-类卸载时禁用CMS类卸载选项),您是否可以尝试增加MetaspaceSize-XX:MetaspaceSize=64m或128m,因为禁用类GC是很危险的,可能会降低它们的GC频率我现在的最佳猜测是:FlightRecorder在收集堆统计信息时显式触发了GC。可能是这些显式触发的GC以某种方式忽略了标志-Xnoclassgc和类似的标志…您只能通过启用-XX:+PrintGCDetails-XX:+PrintGCTaskTimeStamps来检查GC活动,无需工具验证我尝试过-Xnoclassgc,但运气不佳:“类卸载”阶段仍然存在于配置文件中,而且仍然占据了总GC时间的很大一部分…我很惊讶,Xnoclassgc不能与CMSClassUnloadingEnabled一起使用(当指定-Xnoclassgc或-XX:-ClassUnloading时禁用CMS类卸载选项),您是否可以尝试增加MetaspaceSize-XX:MetaspaceSize=64m或128m,因为禁用类GC是危险的,也许可以降低GC频率我现在最好的猜测是:FlightRecorder在收集堆统计信息时显式触发了GC。可能是这些显式触发的GC以某种方式忽略了标志-Xnoclassgc和类似的标志…您只能通过启用-XX:+PrintGCDetails-XX:+PrintGCTaskTimeStamps来检查GC活动,而无需使用工具进行验证