繁体   English   中英

如何从Java获取空闲内存信息

[英]How to get free memory info from Java

我使用以下几行来获取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任务管理器中的内存使用率数字:性能:物理内存? 我需要依靠这些数字。

JVM不允许Java占用所有可用的系统内存。 取而代之的是,JVM会获取一个固定的块,并在该块中分配所有对象。 如果该区域已满,则您内存不足! 有命令行选项可以替代JVM的最大/初始内存使用量。

更为重要的问题是,您不应该依赖于跟踪可用/最大内存。 您在做什么取决于跟踪内存?

更新:

如果您需要的内存超过1.5GB,请尝试64位

如果您要跟踪内存用尽,请考虑弄清楚我们的程序为什么这样做,并且可以通过其他算法或更好地管理对象来防止这种情况发生。 当内存达到零时,您打算做什么? 弹出一个对话框,告诉用户他们被搞砸了并退出程序? 我能理解一个感激的关机,但是警告用户使用大的-Xmx不会减少它。

如果需要详细的Windows统计信息,可以使用WMI和通过cscript.exe执行的.vbs脚本。

该链接详细描述了一个脚本,该脚本提取的内存统计信息可能超出您的预期。

通过通常的“流程/运行时”组合执行此操作,然后简单地读回所需的数字。 这些是系统级别的统计信息,而不是VM的统计信息(尽管WMI也可以拉回每个进程的统计信息)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM