gpt4 book ai didi

java - 我可以阻止 java.util.logging 导致内存泄漏吗?

转载 作者:行者123 更新时间:2023-11-30 09:53:11 26 4
gpt4 key购买 nike

停止我的网络应用后,大量的 PermGen 没有被释放。罪魁祸首似乎是 WebappClassLoader(在 Tomcat 中,但它也发生在 Jetty 中),它通过来自一堆其他对象的引用保存在内存中。下图显示了引用 WebappClassLoader 的对象,以及引用它们的事物等等。

alt text

其中一个粘附对象似乎是 net.lag.logging.Level$INFO$ 的一个实例,对它的引用存储在静态 known 数组中在 java.util.logging.Level 中。

java.util.logging.Level 似乎保留了对其自身所有实例的静态引用。糟糕、讨厌的 java.util.logging.Level!我能做些什么吗? java.util.logging 框架由第三方库使用,所以我认为我没有不使用它的选项。

最佳答案

除了让 Sun 修复 Level 实现或更改您的库以取消其自定义 Level,我能想到的唯一方法是将库移出 Web 应用程序类加载器并移入容器(共享或公共(public)类加载器) .

如果您这样做,仍然会有 Level 的自定义实例,但它们将不再链接到 Web 应用程序。因此,如果您反弹 webapp,它将继续回收相同的关卡(不会泄漏新关卡)。

当然,这会影响库的类加载器,并且可能会中断。有些东西需要在web应用中,不能移到容器中。即使该库继续工作,它本身也可能保留对 Web 应用程序其他部分的类似引用,这将再次出现完全相同的问题。不过,请尝试一下。

关于java - 我可以阻止 java.util.logging 导致内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3964855/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com