我在我的Servlet中使用了很多SimpleDateFormat对象。不幸的是,SimpleDateFormat不是线程安全的。因此,我考虑使用ThreadLocal来包装它,以促进SimpleDateFormat对象的重用。我写了一个UTIL级启用此:Servlet中的SimpleDateFormat
public class DateUtil {
private final static ThreadLocal<SimpleDateFormat> dateFormat = new ThreadLocal<SimpleDateFormat>() {
return new SimpleDateFormat();
}
public static SimpleDateFormat get() {
return dateFormat.get();
}
}
其实,这似乎导致内存泄漏。当关闭我的web应用程序,Tomcat的记录以下错误信息:
重度:Web应用程序[]创建一个ThreadLocal类型的键[空](值[email protected]] )和类型为[java.text.SimpleDateFormat](值为[[email protected]])的值,但在Web应用程序停止时未能删除它。这很可能造成内存泄漏。
我知道内存泄漏的原因,但是在Servlet中处理SimpleDateFormat对象(或任何其他非线程安全的对象)的最佳方式是什么?
我明白我不是一个应该被问问题的的CommNet,但什么是内存泄漏的原因是什么?在此先感谢您。 – Victor 2011-01-10 22:19:37
原因是SimpleDateFormat实例将针对碰巧运行此代码的每个请求线程进行保留,在任何时候都不会删除该实例。 – 2011-01-10 22:31:25