JVM应用程序在Oracle Hotspot JVM上运行,它以默认的JVM设置启动,但初始堆大小为100MB,最大堆大小为1GB。
在哪种情况下JVM会决定增加当前的堆大小,而不是尝试使用GC?
答案 0 :(得分:5)
HotSpot JVM持续监控分配率和对象的生命周期。它试图实现两个关键因素:
简而言之,您可以将其描述为HotSpot具有一些已配置的阈值,该阈值表示在运行垃圾收集器后可以免费释放总分配堆的百分比。例如,如果此阈值配置为70%,并且在运行完整GC堆使用率为80%之后,则将分配额外的内存以达到阈值。当然,更大的堆意味着更长的暂停,而更小的堆意味着更频繁的集合。
但是你必须记住JVM非常复杂,你可以改变这种行为,例如使用flags:
AdaptiveSizePausePolicy
,它将选择堆大小以实现最短的暂停AdaptiveSizeThroughPutPolicy
,它将选择堆大小以实现最高吞吐量GCTimeLimit
和GCTimeRatio
,用于设置执行应用程序所花费的时间答案 1 :(得分:0)
无法进行垃圾收集时占用Heap
的对象数量增加。
当对象由于当前进程使用而无法收集为垃圾时,JVM
需要增加它的堆大小,以允许创建新对象。