我正在 JBoss 中运行 Java 应用程序,该应用程序定期执行内存密集型任务。 org.jboss.Main 使用的内存量在此期间会增加,但任务完成后不会下降。 我一直在使用 VisualVM 分析该进程并强制进行垃圾收集。 org.jboss.Main 使用的内存仍保持在 1GB 左右。堆转储的基本信息如下。
Total bytes: 53,795,695
Total classes: 5,696
Total instances: 732,292
Classloaders: 324
GC roots: 2,540
Number of objects pending for finalization: 0
我还查看了使用内存的类,发现 char[] 占据了大部分内存。
谁能告诉我为什么 VisualVM 显示 JBoss 使用的内存比我的 Activity 监视器少 20 倍?如果有人可以提供任何建议或指示来进一步阅读如何让 JBoss 在作业完成后释放内存,我们将不胜感激。
最佳答案
VisualVM 显示 Full GC 后堆的大小。这是堆增长之前可以使用的数据量。
堆转储显示当前使用了多少堆。
关于java - JBoss不释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19026775/