如果我运行java程序,VM最初会为堆分配一些内存,对吗?
每次使用的内存超过可用内存时,堆都会增加,对吧?
一旦使用更少的内存,堆可能会变小吗?
谢谢!
答案 0 :(得分:5)
是的,垃圾收集器可以自由地减少堆的大小,如果它在少数收集后发现应用程序需要的内存方式小于配置堆。您可以在VisualVM中观察此功能,这里是使用ab
进行压力测试的Tomcat实例:
正如您所看到的,堆大小(橙色系列)基本上在每个GC之后发生变化(蓝色系列中的下降)。有时堆大小增加,有时会减少。 JVM可以根据实际使用情况自由调整大小(此处总堆大小设置为1G)。
答案 1 :(得分:0)
Java进程从堆的初始内存分配和所述堆的最大分配开始。这是你通过-Xms和Xmx jvm命令行参数传递的内容。这些在过程运行期间不会改变。
垃圾回收后,对象实例使用的实际内存量会减少。