java - Glassfish 中加载的类总数

标签 java memory deployment glassfish classloader

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

最佳答案

你有一个类加载器泄漏!

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

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

有关这方面的更多信息,请查看 Frank Kieviet的博客文章名为 Classloader Leaks以及 How to Fix Classloader Leaks 的后续行动.

关于java - Glassfish 中加载的类总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/533545/

相关文章:

Java,无法从不同的类文件接收数据

java - 我们可以使用 Web 套接字在微服务之间进行通信吗?

c# - 读取大型 Excel 工作表时的内存优化

javascript - 使用 nodemon 部署到 Heroku 的 Node 应用程序随机崩溃

java - 递归搜索目录,但系统目录出现 NullPointerException

java - Android Wear与智能手机之间数据传输的安全性

c++ - 对象在什么时刻恰好是 "created"?

java - 解决 java.lang.StackOverflowError 内存问题

eclipse - 使用eclipse wtp将web项目发布到tomcat后缺少类

visual-studio - VS2005 + SharePoint 部署的最佳项目格式?