Java VM可以使堆变小吗?

cla*_*amp 3 java jvm

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

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

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

谢谢!

Tom*_*icz 5

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

VisualVM内存

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