我遇到过PermGen内存问题并使用Java VisualVM进行调试。
我将问题追溯到一行代码,这会导致内存使用增加而不会减少。使用这行代码,没有类被卸载。
代码行是:
LogManager.getLogger(Logger.class.getName());
我正在使用log4j2。有没有人有任何建议修复这一行,以摆脱内存问题?
答案 0 :(得分:0)
这是一个有根据的猜测。正如the link offered @Joachim in the comments所建议的那样,增加PermGen
空间意味着ClassLoader加载的类数量越来越多,或者实际使用的字符串越来越多。
(See this StackOverflow question to learn more about String interning)
基于此,我会更改您的代码以引用静态的内容,这可能是getName()
没有给您的。
我建议:
LogManager.getLogger(Logger.class.getName().intern());
或者更常见的是:
LogManager.getLogger(Logger.class);
但您实际上是想记录Logger.class
吗?
或许考虑实际做:
LogManager.getLogger(MyClassWhereLoggingHappens.class);