Java程序消耗大量内存(增长1.5倍的Xmx)

时间:2011-11-04 12:39:33

标签: java jvm aix heap-dump

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

操作系统:AIX

Java:IBM JVM 1.6

CPU:Power 7 SMT -4

4 个答案:

答案 0 :(得分:2)

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

在此page about YourKit中我读到了:

  

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

  • 如果存在类加载问题,例如泄漏的加载程序。在这种情况下,可以通过类加载器视图来解决问题。
  • 如果有字符串被大量实习。为了检测这种问题,可以使用分配记录。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

感谢您的回忆。

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

答案 3 :(得分:0)

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