Runtime类中的内存方法是什么意思?

时间:2014-05-28 23:49:22

标签: java

Runtime.getRuntime().totalMemory()

我想这是我目前使用的内存量 - 分配的内存量。更多的对象,更多的记忆,是吗?

Runtime.getRuntime().freeMemory()

这可能是,我可以使用未分配的内存量吗?

因此,我的程序可用的总内存量应为totalMemory() + freeMemory()?命名约定对我没有多大帮助。

但是,这是什么

Runtime.getRuntime().maxMemory()

到底是什么?

3 个答案:

答案 0 :(得分:2)

Javadoc确实给出了一个非常明确的定义。然而,在我看来OP对JVM如何工作有点困惑。

首先,来自Javadoc的定义:

  

freeMemory():返回Java虚拟机中的可用内存量   maxMemory():返回Java虚拟机将尝试使用的最大内存量   totalMemory():返回Java虚拟机中的内存总量。

关于JVM如何分配内存的解释(这当然是一个非常简短的解释,但它应该给你的图片):

在大多数(如果不是全部)JVM实现中,通常存在JVM可以从OS请求的内存上限。 (例如,在Sun / Oracle JVM中,它受-Xmx影响)。如果将限制设置为2GB,则maxMemory()将返回2GB。

但是,JVM启动时,允许分配的内存少于允许的上限。例如,即使您已将上限设置为2GB,当JVM启动时,它也只能从OS请求500MB。当创建的对象越来越多,并且需要更多内存时,它可以从操作系统请求更多内存,直到达到上限。

在上述情况下,当JVM仅从OS分配500MB时,totalMemory()将返回500MB。

如果在500MB以内,已经使用了400MB(对于创建的对象等),那么freeMemory()将返回100MB。

答案 1 :(得分:0)

我相信这是分配给Java程序的最大值,如果从Console启动程序,则可以指定最大内存(java -Xms& -Xmx)。示例为java -jar -Xms1024MB -Xmx1024MB myjar.jar

它如何帮助:D

答案 2 :(得分:0)

总内存是虚拟机管理的当前内存量。这并不反映实际使用了多少,而是管理了多少。 可用内存是当前可用的总内存量。使用的金额大致是完全免费的。 最大内存是虚拟机尝试自身增长的最大值(即Xmx)。