我正在与 permgen 内存泄漏错误作斗争。我检查正在运行的系统的能力非常有限,所以我不得不在源代码中徘徊。为了减少搜索区域,我只想找到(可能)消耗永久区域内存的方法。
例如,我有绝对被调用的根方法集。从该集合中,我需要找到可能从 permgen 区域消耗内存的方法的路径(即调用 String.intern() 等)。目前我面临两个问题:如何确定方法是否正在消耗 permgen 空间,第二个问题 - 我如何遍历字节码以遵循执行路径?
感谢提前,任何信息表示赞赏!
我正在与 permgen 内存泄漏错误作斗争。我检查正在运行的系统的能力非常有限,所以我不得不在源代码中徘徊。为了减少搜索区域,我只想找到(可能)消耗永久区域内存的方法。
例如,我有绝对被调用的根方法集。从该集合中,我需要找到可能从 permgen 区域消耗内存的方法的路径(即调用 String.intern() 等)。目前我面临两个问题:如何确定方法是否正在消耗 permgen 空间,第二个问题 - 我如何遍历字节码以遵循执行路径?
感谢提前,任何信息表示赞赏!
更好的方法是进行内存转储,然后使用Eclipse 内存分析器来调查哪些类定义和字符串占用了 PermGen 区域中的空间。
您还可以添加以下标志 -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled 以启用 PermGen 区域的滑动。