垃圾收集是否发生在Java堆的PERM Area
中?
PERM区域用于存储有关类,方法,变量等的元数据... 还有在堆的PERM区域创建的字符串池,所以我相信这里不会发生垃圾收集?
答案 0 :(得分:3)
每次部署时,新的类对象都会被放入PermGen中,从而占用不断增加的空间。无论你制作PermGen空间有多大,它都将在经过足够的部署后不可避免地达到顶峰。你需要做的是采取措施冲洗PermGen,以便你可以稳定它的大小。有两个JVM标志可以处理这种清理:
-XX:+CMSPermGenSweepingEnabled
此设置包括垃圾收集运行中的PermGen。 默认情况下,PermGen空间永远不会包含在垃圾收集中(因此无边界地增长)。
-XX:+CMSClassUnloadingEnabled
此设置告诉PermGen垃圾收集扫描对类对象执行操作。默认情况下,即使在garabage集合期间访问PermGen空间时,类对象也会获得免除。
答案 1 :(得分:0)
我认为理论上如果一个类加载器被垃圾收集,那个类加载器加载的类可以被垃圾收集。这些类将在永久世代中。