1

我有一个 java 程序(做很多内存操作)。我已经为进程(-Xmx)分配了 10GB 的 Java 堆。系统总内存为 30 GB。Java 程序实际上占用了将近 24 GB 的内存(我可以从 svmon 输出中看到)。Java 堆利用率低于 10 GB(来自详细 GC)。我想知道剩余的内存(24-10 = 14 GB 内存)在使用什么?是本机堆吗?(我没有任何 JNI 代码或任何其他可以使用 JNI 代码的第三方库)。你能告诉我如何监控本机内存使用情况吗?

操作系统:AIX

Java:IBM JVM 1.6

CPU : 电源 7 SMT -4

4

4 回答 4

2

另一种类型的内存是非堆内存。尝试使用JConsole监控情况。

在这个关于 YourKit 的页面中,我读到:

非堆内存大小的异常增长可能表明存在潜在问题,在这种情况下您可以检查以下内容:

  • 如果存在类加载问题,例如泄漏的加载器。在这种情况下,可以借助类加载器视图来解决问题。
  • 如果有字符串被大量拘留。为了检测这样的问题,可以使用分配记录。
于 2011-11-04T12:48:08.040 回答
0

你用过探查器吗?这将帮助您确定哪些对象正在消耗内存以及 RAM 中发生了什么

于 2011-11-04T12:48:18.580 回答
0

谢谢你的记忆。

我只是把它放在这里:https ://www.ibm.com/developerworks/java/library/j-nativememory-aix/

于 2011-11-04T12:48:36.227 回答
0

IBM JMAT是一个很好的工具,但是需要分析大量内存。您对您正在使用的内存量是否适合您正在操作的对象的确定程度如何?有了这么大的调用堆栈,我将开始探测泄漏的引用。

于 2011-11-04T12:51:45.300 回答