我最近开始分析我使用 VisualVM 编写的 osgi java 应用程序。我注意到的一件事是,当应用程序开始向客户端发送数据(通过 JMS)时,加载的类的数量开始以稳定的速度增加。但是,堆大小和 PermGen 大小保持不变。类的数量永远不会下降,即使在它停止发送数据之后也是如此。这是内存泄漏吗?我认为是的,因为加载的类必须存储在某个地方,但是即使我运行应用程序几个小时后堆和 permgen 也不会增加。
要获取我的分析应用程序的屏幕截图,请转到 here
最佳答案
Are you dynamically creating new classes on the fly somehow?
感谢您的帮助。我想出了问题是什么。在我的一个类(class)中,我使用 Jaxb 创建 XML 字符串。为此,JAXB 使用反射来创建一个新类。
JAXBContext context = JAXBContext.newInstance(this.getClass());
因此,尽管 JAXBContext 并未在堆中循环,但类已被加载。
我再次运行我的程序,如我所料,我看到了一个正常的平台。
关于java - Java 应用程序中已加载类的数量可能存在内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/167740/