当前位置: 首页 > 知识库问答 >
问题:

使用ThreadLocal的库可能导致Tomcat中的内存泄漏

郎弘业
2023-03-14
private static final ThreadLocal<DateFormat> THREAD_LOCAL_DATE_FORMAT =
        new ThreadLocal<DateFormat>() {
    @Override
    protected DateFormat initialValue() {
        return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
    }
};

严重:web应用程序[]创建了一个ThreadLocal,其键类型为[com.box.sdk.boxDateFormat$1](值为[com.box.sdk.boxDateFormat$1@275AB696])和值类型为[java.text.SimpleDateFormat](值为[java.text.SimpleDateFormat@faabb360]),但在web应用程序停止时未能删除它。线程将随着时间的推移而更新,以避免pro bable内存泄漏

在不重写大部分库的情况下,我有办法处理这种情况吗?

共有1个答案

那宏大
2023-03-14

消息告诉您,Tomcat将替换线程以清除这些孤立的ThreadLocal值。因此,虽然Tomcat不能保证能防止出现问题,但它正在努力减轻bug的影响。

通常,这可能是一个问题,因为当对弱引用的ThreadLocal实例进行垃圾回收时,线程映射中的条目可能会保留一段时间,从而防止对值、其类及其类加载器进行垃圾回收。但是,由于本例中的值(dateformat)来自引导加载程序,因此无论如何都不会卸载它,也不应该是一个问题。

要在应用程序关闭时清除这些孤立项,必须使用反射深入Thread的内部。听起来很乱!

 类似资料:
  • 我们已经设法摆脱了几乎所有的内存泄漏错误消息,但最后一个仍然被困住了。 2014年6月10日下午3:36:15 org.apache.catalina.loader.webappClassLoader checkThreadLocalMapForLeaks严重:web应用程序[/myapp]创建了一个ThreadLocal,其键类型为[com.sun.faces.application.appli

  • 我在Tomcat中得到了threadlocal内存泄漏错误,我正在使用ThreadPool,但在我的WebApp中没有threadlocal的实现。 严重:web应用程序[/mywebapp]创建了一个ThreadLocal,其键类型为[org.a pache.http.impl.cookie.dateformatholder$1](值为[org.apache.http.imp l.cookie.

  • 当关闭Tomcat时,我得到以下错误: 严重:web应用程序[App]创建了一个ThreadLocal,其键类型为[org.apache.logging.log4j.core.layout.PatternLayout$1](值为[org.apache.logging.log4j.core.layout.PatternLayout$1@14391AAF]),值类型为[java.lang.String

  • 在Activity中使用Thread导致的内存泄漏 原文链接 : Activitys, Threads, & Memory Leaks 原文作者 : AlexLockwood 译文出自 : 开发技术前线 www.devtf.cn 译者 : chaossss 校对者: yinna317 状态 : 完成 注:这篇博文涉及的源码可以在 GitHub 上面下载哦 做 Android 开发最常遇到的问题就是

  • 我想首先说,这是我第一次必须处理性能,因为这是我第一次开发一个android应用程序。 该应用程序是一个源代码编辑器,在这里你可以打开文件,修改它们,并将它们保存回来。该应用程序由4个部分组成: 导航器视图:包含打开文件的ListView和打开文件夹的TreeView。 代码视图容器:它保存包含实际代码的视图。 代码容器:这是一个小视图,包含一个文本视图和一个自定义EditText(由我扩展Edi

  • 我在我的多线程应用程序(10个线程)中执行webServiceTemplate.marshalSendAndAccess,它会导致Finalizer类的内存泄漏。我发现哪些类在调试时在实现中使用finaliz。在大多数情况下,它是UnmarshallImpl和HttpsURLConnectionImpl。Jaxb2Marshaller为每个请求创建UnmarshallImpl的新实例,正如我所发现