何时使用Runtime.maxMemory()和totalMemory()?

6
什么是Runtime.maxMemory()Runtime.totalMemory()之间的确切区别?对于我来说,javadoc文档相当模糊。
这两种方法的典型用例是什么,即在何时使用其中一个不合适使用另一个?
4个回答

7
totalMemory() 返回当前使用的内存量,而 maxMemory() 则告诉您JVM总共可以分配多少内存。
注意:从中可得出: totalMemory() <= maxMemory(),您还可以通过 maxMemory() - totalMemory() 得到“剩余内存量”。
一个应用场景是诊断程序使用了多少内存,您将使用 totalMemory() 进行诊断。
注意:两者仅涉及堆内存,不涉及栈内存。

1
totalMemory() 返回当前使用了多少内存,你是说已分配的吗? - Yousha Aleayoub

5

总内存是当前分配给JVM的内存,随时间而变化。最大内存是JVM可能达到的最大内存。它是总内存的上限。


3

MaxMemory()是由Xmx参数设置的值。


程序运行后如何获取Xms参数? - Dungeon Hunter

0

totalMemory()代表JVM当前堆大小,即当前由对象占用的已使用内存和可用于新对象的空闲内存的组合。根据javadoc,totalMemory()返回的值可能随时间和环境而变化。

JVM totalMemory也等于JVM的初始堆大小

最大堆空间在JVM生命周期内不会改变。JVM始终尝试根据创建的新对象数量扩展totalMemory()的大小,但不会超过maxMemory()大小,否则将出现java.lang.OutOfMemoryError。


“可能随时间变化”更或少地表明,“等于初始堆大小”的可靠性在一般情况下不太可能。 - Gus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接