如果我运行一个 java 程序,VM 最初会为堆分配一些内存,对吗?
每当使用的内存超过可用内存时,堆就会增加,对吗?
一旦使用更少的内存,堆是否有可能变得更小?
谢谢!
最佳答案
是的,如果垃圾收集器在几次收集后发现应用程序对内存的需求远小于配置的堆,那么它可以随意减小堆的大小。您可以在 VisualVM 中观察到此功能,这里是使用 ab
进行压力测试的 Tomcat 实例:
如您所见,堆大小(橙色系列)在每次 GC 后基本上都会发生变化(蓝色系列下降)。有时堆大小会增加,有时会减少。 JVM 可以根据实际使用情况自由调整大小(这里总堆大小设置为 1G)。
关于Java VM 堆可以变小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9566147/