由于LogManager.getLogger(Logger.class.getName()),PermGen空间增加;

时间:2015-01-29 14:59:06

标签: java memory log4j2 visualvm

我遇到过PermGen内存问题并使用Java VisualVM进行调试。

我将问题追溯到一行代码,这会导致内存使用增加而不会减少。使用这行代码,没有类被卸载。

代码行是:

LogManager.getLogger(Logger.class.getName());

我正在使用log4j2。有没有人有任何建议修复这一行,以摆脱内存问题?

1 个答案:

答案 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);