2

我有 EJB 的企业应用程序。该应用程序的总大小为 34 兆。当我部署我的应用程序时,一切都很好,但是当我重新部署它时,总加载类的数量会增加。我正在使用 visualVM 来查看此信息。它应该是这样还是内存泄漏。如何解决这个问题呢?谢谢

4

2 回答 2

6

你有一个类加载器泄漏!

您通常会发现,当您在任何JavaEE 应用程序服务器(包括 Glassfish)上部署应用程序时,应用程序服务器将专门为您的应用程序创建一个新的类加载器。当您的应用程序初始化并运行时,该类加载器将加载新类,这些新类将被放置到永久内存中,称为PermGen区域。

当应用程序被取消部署时,该类加载器应该被垃圾收集,但有时这不会发生,因为某些东西导致引用持续存在。当您重新部署应用程序时,应用程序服务器会执行与以前相同的动作,但现在可用的内存更少了。

有关这方面的更多信息,请查看Frank Kieviet的名为 Classloader Leaks的博客文章以及有关如何修复Classloader Leaks的后续文章。

于 2009-02-10T19:01:03.950 回答
0

Visual VM 只是 Netbeans 中包含的“分析器”工具的独立版本。

因此,为了检测您的内存泄漏,您应该阅读 Netbeans 分析器的文档。

这里有一些链接可以帮助您入门

于 2009-02-10T21:27:38.513 回答