线程本地和内存泄漏

线程本地和内存泄漏,第1张

线程本地和内存泄漏

PermGen的exhaustions 与组合

ThreadLocal
往往是由引起 的类加载器泄漏

一个示例:
想象一个具有 工作线程 池的应用服务器。
它们将保持活动状态,直到应用程序服务器终止。
部署的Web应用程序在其一个类中使用一个 静态

ThreadLocal
变量来存储一些线程本地数据,该数据
SomeClass
是Web应用程序的另一个类的实例(以下简称它)。这是在工作线程中完成的(例如,此 *** 作源自
HTTP请求 )。


重要提示:
根据定义,对
的引用

ThreadLocal
__保留直到“拥有”线程死亡或ThreadLocal自身不再可访问。

如果Web应用程序 无法清除参考

ThreadLocal
上关机 ,不好的事情会发生:
由于工作线程通常不会死和参考
ThreadLocal
是静态的,该
ThreadLocal
仍然引用
的情况下
SomeClass
,Web应用程序的类- 即使Web应用程序已停止!

因此, 无法 对Web应用程序的 类加载器进行垃圾回收 ,这意味着Web应用程序的 所有类 (和所有静态数据)都将
保持加载状态。 (这会影响PermGen内存池以及堆)。
Web应用程序的每次重新部署迭代都会增加permgen(和堆)的使用。

= >这是permgen泄漏这种泄漏的

一个流行示例是
log4j中的此bug(同时已修复)。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5478002.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存