我一直在想 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/