【发布时间】:2009-05-01 18:47:13
【问题描述】:
我使用以下几行来获取 Java 的内存使用情况:
Free_Memory=Run_Time.freeMemory()/1048576; // 1024 x 1024 = 1K x 1K = 1Meg
Total_Memory=Run_Time.totalMemory()/1048576; // 992 Total on a 4 GB PC
我得到的 Free_Memory 是 : 900,但还差得很远,当 Free_Memory 下降到 600 左右时,我的程序内存不足并产生堆溢出消息。
于是我查看了 => Windows 任务管理器:性能:物理内存:空闲,下降到 1、2 或 0,这更准确地反映了我的内存情况,据此,我的总内存是: 4089 是正确的,而 Java 的 Total_Memory=992 是不正确的。
所以,我现在的问题是:在我的 Java 程序中,如何获得反映在 Windows 任务管理器中的内存使用数字:性能:物理内存?我需要依赖这些数字。
【问题讨论】:
-
这些数字并非“不正确”,只是没有报告您认为他们报告的内容。
-
然后帮助他了解他们报告的内容。这样的评论太没用了。 Runtime.freeMemory 报告 Java VM 可用的内存量,而不是系统本身。
-
对不起,克里斯·范恩。我已经发布了一个答案并将其删除,然后我认为至少其中一部分可能会有所帮助,所以我发表了评论。但是我不确定为什么当 freeMemory() 仍然报告 600 MB 可用时他的内存不足。
-
我也研究了 MXBean,但我找不到如何从中获取可用的内存信息。