ThreadLocal是否会导致Glassfish服务器中的内存泄漏,就像它在Tomcat中泄漏一样?为什么? http://wiki.apache.org/tomcat/MemoryLeakProtection
答案 0 :(得分:1)
是的,它会泄漏,Glassfish甚至不会根据最近的Glassfish JIRA问题警告你:
http://java.net/jira/browse/GLASSFISH-14128
然而需要说明的是,ThreadLocal特定泄漏本身并不是app / web服务器中的“bug”,而是在这些容器中运行的组件中的代码存在问题(无论这些组件是servlet,会话bean还是无论)。
一般来说,应用程序服务器/ Web容器尝试做的是保护开发人员不要编写大量维护代码并使他专注于业务逻辑。然而,他需要对应用程序服务器如何工作(线程池,类加载器,部署/取消部署机制......)有一些了解,以便正确或避免此类ThreadLocal问题。它并不总是很容易,而且非常棘手。我记得读过Glassfish中的内存泄漏问题吗?与使用自定义日志级别有关。
Apache Tomcat的作用是它有一个帮助器机制来警告用户/处理用户代码中一些常见的内存泄漏问题。但即使在问题中提供的链接中,您也可能会发现并非所有可能的ThreadLocal内存泄漏都是使用此机制自动完成的。
Glassfish似乎还没有这个附加功能。
答案 1 :(得分:0)
此问题会导致各种问题。我刚刚发布了一段时间
I need help finding my memory leak using MAT
我们自己手动释放对象。我想我在GF错误列表中看到这已在3.1x版本中得到修复。