jvm ThreadLocal即使在清除后也会导致内存泄漏?

xggvc2p6  于 2022-11-07  发布在  其他
关注(0)|答案(1)|浏览(179)

我有一个.war项目,其中包含在接收HTTP调用之前和之后设置和重置ThreadLocal<String>的逻辑。从我运行的测试来看,我非常确定这两个操作都正确执行,即ThreadLocal在设置后不久就被清除。为了测试我的项目,我有一个程序创建了10个线程,并从这些线程调用服务器。在等待1秒后,这个过程重复了大约500次。2我的目标是监视正在被消耗的堆存储并确保没有内存泄漏。
以下是我的重要观察:
1.当ThreadLocal使用时呼叫服务器:堆大小在整个测试期间不断增加,并在测试完成后下降到测试前的水平。

1.使用ThreadLocal时调用服务器(设置然后重置):在完成对服务器的调用后,堆保留了大部分已用空间。因此,内存泄漏。

根据我对ThreadLocal使用的了解,如果没有正确重置,它们可能会导致内存泄漏。但是,在我的情况下,我会采取适当的措施来确保ThreadLocal被清除(在finally块中重置ThreadLocal)。既然如此,是什么可能导致内存泄漏,我该如何解决它?

  • P.S.:下面是项目中的一些相关代码片段:*

第一个

1l5u6lss

1l5u6lss1#

您可能使用了ThreadLocal<SomeCustomClass>,它阻止了类加载器,从而阻止了整个应用程序被垃圾收集。如果是这样的话,我建议您使用一个自定义的ThreadLocal类,例如,我创建的https://github.com/codesinthedark/ImprovedThreadLocal

相关问题