我一直在想 Runtime.getRuntime().totalMemory()Runtime.getRuntime().freeMemory()Runtime.getRuntime().maxMemory() 的确切含义是什么。

我的理解是, Runtime.getRuntime().totalMemory() 返回我的进程正在使用的总内存。那是对的吗?
freeMemory()maxMemory() 怎么样?

最佳答案

根据 API

totalMemory()

返回 Java 虚拟机中的总内存量。此方法返回的值可能会随时间变化,具体取决于主机环境。
请注意,保存任何给定类型的对象所需的内存量可能取决于实现。
maxMemory()

返回 Java 虚拟机将尝试使用的最大内存量。如果没有固有限制,则将返回值 Long.MAX_VALUE。
freeMemory()

返回 Java 虚拟机中的可用内存量。调用 gc 方法可能会导致 freeMemory 返回的值增加。

关于您的问题, maxMemory() 返回 -Xmx 值。

您可能想知道为什么会有 totalMemory() maxMemory() 。答案是JVM懒惰地分配内存。假设您这样启动 Java 进程:
java -Xms64m -Xmx1024m Foo

您的进程以 64mb 的内存开始,如果需要更多(最多 1024m),它将分配内存。 totalMemory() 对应于 JVM 当前可用于 Foo 的内存量。如果 JVM 需要更多内存,它将懒惰地分配到最大内存。如果您使用 -Xms1024m -Xmx1024m 运行,则您从 totalMemory()maxMemory() 获得的值将相等。

此外,如果您想准确计算已用内存量,请使用以下计算方法:
final long usedMem = totalMemory() - freeMemory();

关于java - 什么是 Runtime.getRuntime().totalMemory() 和 freeMemory()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3571203/

10-14 10:00