【发布时间】:2012-05-29 18:55:01
【问题描述】:
我正在使用线程本地方法为每个应用程序线程创建一个 json 序列化程序,以避免每次我想序列化它时创建对象。
我使用的代码如下:
public class JsonSerializerFactory {
private static final ThreadLocal<JsonSerializer> JSON_SERIALIZER =
new ThreadLocal<JsonSerializer>() {
@Override
protected JsonSerializer initialValue() {
return new JsonSerializer();
}
};
public static JsonSerializer get() {
return JSON_SERIALIZER;
}
}
每次我想获得序列化程序时:
JsonSerializerFactory.get()
当我关闭 tomcat 时,我看到以下日志:
May 23, 2012 9:15:25 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads SEVERE: The web application [] appears to have started a thread named [Logback AsyncAppender Dispatcher [Async_Logger] - Thread-16] but has failed to stop it. This is very likely to create a memory leak.
我已经阅读了Tomcat memory leak protection,但我可能在那里遗漏了一些东西。 我真的有泄漏吗,还是应该忽略此消息?
谁能解释一下?
【问题讨论】:
-
tomcat 日志消息是指一个记录器(logback),而不是你的 JsonSerializer。您在此问题中引用的代码可能与您可能的内存泄漏问题无关。
-
这个记录器在它的线程本地有一个 json 序列化器
-
Logback AsyncAppender?您必须使用自定义附加程序,因为截至今天 (2012-05-23) 没有 AsyncAppender 附带 logback。
标签: java tomcat memory-leaks thread-local