JVM:jmap heap 堆參數分析MinHeapFreeRatio、MaxHeapFreeRatio、MaxHeapSize、NewSize、MaxNewSize


一、jmap獲取堆概要信息
JDK9之前:

jmap -heap 33146

JDK9及之后:

jhsdb jmap --heap --pid 33146

執行示例:

zhibo-mac:JavaVirtualMachines zhibo$ jhsdb jmap --heap --pid 33146
Attaching to process ID 33146, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 11.0.6+8-LTS

using thread-local object allocation.
Garbage-First (G1) GC with 10 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 4294967296 (4096.0MB)
   NewSize                  = 1363144 (1.2999954223632812MB)
   MaxNewSize               = 2576351232 (2457.0MB)
   OldSize                  = 5452592 (5.1999969482421875MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 1048576 (1.0MB)

Heap Usage:
G1 Heap:
   regions  = 4096
   capacity = 4294967296 (4096.0MB)
   used     = 5242880 (5.0MB)
   free     = 4289724416 (4091.0MB)
   0.1220703125% used
G1 Young Generation:
Eden Space:
   regions  = 6
   capacity = 27262976 (26.0MB)
   used     = 6291456 (6.0MB)
   free     = 20971520 (20.0MB)
   23.076923076923077% used
Survivor Space:
   regions  = 0
   capacity = 0 (0.0MB)
   used     = 0 (0.0MB)
   free     = 0 (0.0MB)
   0.0% used
G1 Old Generation:
   regions  = 0
   capacity = 241172480 (230.0MB)
   used     = 0 (0.0MB)
   free     = 241172480 (230.0MB)
   0.0% used

如果 jmap 命令執行失敗,請參考:JVM工具:使用 jmap 打印 Java 堆信息時報錯:Can’t attach symbolicator to the process
二、Heap Configuration

 

MinHeapFreeRatio         = 40
空閑堆空間的最小百分比,計算公式為:HeapFreeRatio =(CurrentFreeHeapSize/CurrentTotalHeapSize) * 100,值的區間為0到100,默認值為 40。如果HeapFreeRatio < MinHeapFreeRatio,則需要進行堆擴容,擴容的時機應該在每次垃圾回收之后。

  MaxHeapFreeRatio         = 70
空閑堆空間的最大百分比,計算公式為:HeapFreeRatio =(CurrentFreeHeapSize/CurrentTotalHeapSize) * 100,值的區間為0到100,默認值為 70。如果HeapFreeRatio > MaxHeapFreeRatio,則需要進行堆縮容,縮容的時機應該在每次垃圾回收之后。

   MaxHeapSize              = 4294967296 (4096.0MB)
JVM 堆空間允許的最大值。

   NewSize                  = 1363144 (1.2999954223632812MB)
JVM 新生代堆空間的默認值。

   MaxNewSize               = 2576351232 (2457.0MB)
JVM 新生代堆空間允許的最大值。

   OldSize                  = 5452592 (5.1999969482421875MB)
JVM 老年代堆空間的默認值。

   NewRatio                 = 2
新生代(2個Survivor區和Eden區 )與老年代(不包括永久區)的堆空間比值,表示新生代:老年代=1:2。

   SurvivorRatio            = 8
兩個Survivor區和Eden區的堆空間比值為 8,表示 S0 : S1 :Eden = 1:1:8。

   MetaspaceSize            = 21807104 (20.796875MB)
JVM 元空間的默認值。

   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
JVM 元空間允許的最大值。

   G1HeapRegionSize         = 1048576 (1.0MB)
在使用 G1 垃圾回收算法時,JVM 會將 Heap 空間分隔為若干個 Region,該參數用來指定每個 Region 空間的大小。
三、Heap Usage

G1 Heap:
   regions  = 4096
   capacity = 4294967296 (4096.0MB)
   used     = 5242880 (5.0MB)
   free     = 4289724416 (4091.0MB)
   0.1220703125% used

G1 的 Heap 使用情況,該 Heap 包含 4096 個 Region,結合上文每個 RegionSize=1M,因此 Capacity = Regions * RegionSize = 4096 * 1M = 4096M,已使用空間為 5M,空閑空間為 4091M,使用率為 0.12%。

G1 Young Generation:
Eden Space:
   regions  = 6
   capacity = 27262976 (26.0MB)
   used     = 6291456 (6.0MB)
   free     = 20971520 (20.0MB)
   23.076923076923077% used

G1 的 Eden 區的使用情況,總共使用了 6 個 Region,結合上文每個 RegionSize=1M,因此 Used = Regions * RegionSize = 6 * 1M = 6M,Capacity=26M表名當前 Eden 空間分配了 26 個 Region,使用率為 23%。

G1 Young Generation:
Survivor Space:
   regions  = 0
   capacity = 0 (0.0MB)
   used     = 0 (0.0MB)
   free     = 0 (0.0MB)
   0.0% used

G1 的 Survivor 區的使用情況,同 Eden區。

G1 Old Generation:
   regions  = 0
   capacity = 241172480 (230.0MB)
   used     = 0 (0.0MB)
   free     = 241172480 (230.0MB)
   0.0% used


G1 的 老年代的使用情況,同 Eden區。

上文對於 Heap 空間的參數都是可用通過 JVM 虛擬機命令行參數進行設置的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM