You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何多次调用Runtime.maxMemory()返回值会发生变化?

为何Runtime.maxMemory()的返回值会随时间变化?

我在调试代码中的OutOfMemoryError问题时,编写了一个打印内存统计信息(包括最大内存)的方法。多次调用该方法时,MAX内存的返回值却并不相同。

我在启动命令中设置了内存参数:
... -Xmx=$SOME_VAR -Xms=$SOME_VAR

按此设置,Runtime.totalMemory()的输出应与Runtime.maxMemory()完全一致,但实际Runtime.maxMemory()的输出持续变化——多数情况下差异约0.5GB,有时与初始值的差异甚至接近3GB。

硬件并未增减内存,补充信息:系统内存32GB,$SOME_VAR取值约25GB,启动Java前系统空闲内存约29GB。运行以下代码可能打印出不同值:

for (int i = 0; i < 10; i++) {
    Thread.sleep(10_000);
    System.out.println(Runtime.getRuntime().maxMemory());
}

有时得到23.5GB,有时是24GB等。

环境信息

  • Java版本:OpenJDK 1.8 392
  • 操作系统:AWS RHEL Linux OS
  • 硬件:AWS EC2 r5.xlarge实例
  • 内存:32GB
  • -Xmx:25GB(正测试不同取值)

内容的提问来源于stack exchange,提问作者davidalayachew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 15:27:06