Java 分析 Permgen : how to unload enum inside java class

标签 java profiling permgen

我所处的位置是,在服务器 (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/

相关文章:

native 可执行文件的 Android NDK 分析器不生成任何数据

java - 我如何才能看到 PermGen 中到底存储了什么?

java - 在 Hadoop DistributedCache 上存储 TreeSet

java - 获取双引号内的字符串以及字符串的其余部分

c# - ASP.NET MVC - 请求周期中最早可以检测到静态资源请求的点是什么?

jvm - 永久代是堆的一部分还是在 jvm 中位于自身的不同空间

java - Solr Permgen 创建/删除核心时出现异常

java - 使用 MapReduce 作业调用斯坦福CoreNLP API

java - 当具有包含无限循环的函数(监视器)时如何在 Drools 中触发规则?

java - Time Profiler、Instruments、OS X 中缺少 JAVA 过程名称