我所处的位置是,在服务器 (tomcat) 上重复部署-取消部署同一 war 文件的操作会导致 PermGen OutOfMemoryError。我的目标是确保在 war 取消时卸载所有类。
这是我的类(class):
public class ClassA {
//static variables & methods
//instance variables & methods
private EnumInsideClassA myState = EnumInsideClassA.VALUE1;
private enum EnumInsideClassA
{
VALUE1,
VALUE2
}
}
当我清除了ClassA的所有引用时,我看不到ClassA,并且在 war 取消部署时它被卸载了。但是,我仍然看到枚举引用,并且 ClassA$EnumInsideClassA 未卸载。
“myState”实例变量没有 getter,它只会与 ClassA 一起使用
感谢任何帮助
最佳答案
However, I still see the enum references and ClassA$EnumInsideClassA is not unloaded.
如果您可以看到enum
引用,您应该能够看到它们在哪里。现在将有一些可通过枚举类的隐藏静态字段访问的枚举引用,但这些应该是循环引用,并且不应导致 enum
保持可访问性。查看其他地方是否有 enum
引用。
关于Java 分析 Permgen : how to unload enum inside java class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10061295/