我在Tomcat中遇到线程本地内存泄漏错误,并且正在使用ThreadPool,但在我的webapp中没有ThreadLocal的实现。
严重:Web应用程序[/ myWebApp]创建了一个ThreadLocal,其密钥类型为[org.a pache.http.impl.cookie.DateUtils $ DateFormatHolder $ 1](值[org.apache.http.imp l.cookie.DateUtils $ DateFormatHolder $ 1 @ 4c2849]和类型[java.lang.re f.SoftReference]的值(值[java.lang.ref.SoftReference@1e67280]),但是在Web应用程序停止时无法删除它。线程将不断更新,以尝试避免可能的内存泄漏。
我不明白的是,为什么我没有实现它,但仍收到线程局部错误?我想,所以我在网上搜索,摆脱这些消息,并在这里它被写入,为了清理ThreadLocal的我需要使用:
ThreadLocal.remove()
但是我没有ThreadLocal的实现。如果有人向我展示一种方法,我将不胜感激。
显然, 事情 是创建/那些ThreadLocal的实例。如果不是您的代码,则它必须是您正在使用的某个库,或者(可能是)Tomcat本身。
我将从研究可能正在创建的实例开始
org.apache.http.impl.cookie.DateUtils$DateFormatHolder$1
(DataUtils顺便说一下,这是嵌套类中的一个匿名类,因此,除非发生怪异的事情,否则创建将在DateUtils.java文件中进行。)
DataUtils
DateUtils.java
如果检查源代码无济于事,请尝试调试Tomcat实例并在ThreadLocal构造函数上设置断点。