Java的G1垃圾收集器(G1GC)中的类卸载

在Java 6中,我们过去使用以下GC配置来防止在我们的应用程序的多次重新部署后出现Perm Gen OutOfMemoryException

-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled

我们正在转向Java 7,并希望使用新的G1 GC,从我所读过的内容中,将类从Java内存中的PermGen移动到本机内存。

是否有一些标志可以卸载未使用的类?

G1在Full GC期间执行类卸载,因此您无需指定任何参数来启用此function。

您可以使用-XX:+TraceClassUnloading参数-XX:+TraceClassUnloading

另外,请查看HotSpot GC邮件列表中的此电子邮件主题: G1GC中的错误,当代码缓存已满时执行完整GC会导致过度杀伤 。 他们讨论了G1中的类卸载问题。 总之,如果您遇到类卸载问题,则可以使用-noclassgc ,但通常G1中的类卸载没有问题。