JVM通常从分配较小的堆开始。然后,在每个GC运行之后,它将检查以查看有多少可用堆内存。如果可用堆与总堆的比率太小,那么JVM将向堆中添加更多内存(最大配置堆大小)。
第二个相关事实是,当有大量内存需要回收时,GC可以最高效地运行。如果您没有遇到整体系统资源限制(例如,触发页面调度或交换),则通过运行大堆而不是小堆来获得更好的应用程序性能。
假设应用程序编写者知道该应用程序很可能需要给定数量的堆(例如4Mb)才能舒适地运行。通过将该大小设置为最小堆大小,意味着当堆填充(例如)为1Mb,2Mb和3Mb时,JVM无需运行GC。结果,JVM在应用程序启动和正常运行期间运行垃圾回收器的次数更少,应用程序启动速度更快,用户看到的GC暂停次数也更少。



