Java VM可以使堆变小吗?

时间:2012-03-05 11:51:08

标签: java jvm

如果我运行java程序,VM最初会为堆分配一些内存,对吗?

每次使用的内存超过可用内存时,堆都会增加,对吧?

一旦使用更少的内存,堆可能会变小吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

是的,垃圾收集器可以自由地减少堆的大小,如果它在少数收集后发现应用程序需要的内存方式小于配置堆。您可以在VisualVM中观察此功能,这里是使用ab进行压力测试的Tomcat实例:

VisualVM memory

正如您所看到的,堆大小(橙色系列)基本上在每个GC之后发生变化(蓝色系列中的下降)。有时堆大小增加,有时会减少。 JVM可以根据实际使用情况自由调整大小(此处总堆大小设置为1G)。

答案 1 :(得分:0)

Java进程从堆的初始内存分配和所述堆的最大分配开始。这是你通过-Xms和Xmx jvm命令行参数传递的内容。这些在过程运行期间不会改变。

垃圾回收后,对象实例使用的实际内存量会减少。