使用ParallelOld GC禁用ClassUnloading

时间:2016-09-09 09:48:23

标签: 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 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  

这里,类卸载阶段占总192毫秒中的99毫秒 - 即大约。一半的时间。我的应用程序不使用动态代码生成或代理生成,因此我尝试使用-XX:-ClassUnloading禁用类卸载,但没有成功:&#34;类卸载&#34;阶段仍然存在于配置文件中,仍然需要主要GC时间的1 / 2-1 / 3。我找不到任何用于ParallelOld GC的禁用类卸载的特殊标志(我试图找到它,因为CMS有特定的标志)。我如何禁用ParallelOld GC的类卸载?

(HotSpot for linux-amd64 1.8.0_102-b14 64位服务器VM)

1 个答案:

答案 0 :(得分:0)

你可以尝试:

-Xnoclassgc
禁用类的垃圾收集(GC)。这可以节省一些GC时间,从而缩短应用程序运行期间的中断。在启动时指定-Xnoclassgc时,应用程序中的类对象将在GC期间保持不变,并始终被视为实时。

这会导致更多内存被永久占用,如果不小心使用,将会导致内存不足。

或者要考虑内存大小,增加 MetaspaceSize -XX:MetaspaceSize=64m

当类元数据使用量达到MetaspaceSize时(32位客户端虚拟机上为12Mbytes,而64位虚拟机上大小较大的32位服务器虚拟机上为16Mbytes),会引发垃圾收集以收集死类加载器和类。

来源http://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html