JVM将在哪种情况下决定增加堆大小?

3 java performance jvm jvm-hotspot

JVM应用程序在Oracle Hotspot JVM上运行,使用默认的JVM设置启动,但初始堆大小为100MB,最大堆大小为1GB。

在哪种情况下,JVM将决定增加当前堆大小,而不是尝试使用GC?

Jak*_*ski 5

HotSpot JVM持续监视分配率和对象生存期。它试图实现两个关键因素:

  1. 让生命短暂的物体死在伊甸园
  2. 促进长寿命的对象按时堆放,以防止在幸存者空间之间不必要地复制

简而言之,您可以将其描述为HotSpot具有一些已配置的阈值,该阈值指示运行垃圾收集器之后必须释放多少总分配堆。例如,如果将此阈值配置为70%,并且在运行满的GC堆使用率之后将为80%,则将分配更多内存以达到阈值。当然,较大的堆意味着更长的暂停,而较小的堆意味着更频繁的收集。

但是您必须记住,JVM非常复杂,您可以更改此行为,例如通过使用标志:

  • AdaptiveSizePausePolicy,它将选择堆大小以实现最短的暂停
  • AdaptiveSizeThroughPutPolicy,它将选择堆大小以实现最高吞吐量
  • GCTimeLimitGCTimeRatio,它设置了应用程序执行所花费的时间