1. 程式人生 > >visualvm 插件 visual gc 使用介紹

visualvm 插件 visual gc 使用介紹

c++ 靜態變量 location -1 c/c++ 老年代 永久代 存儲 虛擬

visual gc 是 visualvm 中的圖形化查看 gc 狀況的插件。

具體詳細介紹可參照: http://www.oracle.com/technetwork/java/visualgc-136680.html

本文也是在此基礎上進行的整理歸納。

技術分享

OUTPUT FORMAT

visual gc 工具分成三大塊

  • the Visual GC window
  • the Graph window,
  • the Survivor Age Histogram window(可選的)
    •  作者 對 eclipse 監控,這個選項是不可用的,需要調查原因

Visual GC Window

我們看到上方圖片中的 Spaces 就是 Visual GC window 了。它會分成 3 個豎直的部分,分別是 Perm 永生代, Old 老年代和新生代。

新生代又分成 3 個部分 Eden 區, S0 survivor 區, S1 survivor 區.

每個方框中都使用不同的顏色表示,其中有顏色的區域是占用的空間,空白的部分是指剩余的空間。

當程序正在運行時,該部分區域就會動態顯示,以直觀的形式顯示各個分區的動態情況。

技術分享

Graph Window

該區域包含多個以時間為橫坐標的狀態面板。

Compile Time

技術分享

  編譯時間表示虛擬機的 JIT 編譯器編譯熱點代碼的耗時。

  Java 語言為了實現跨平臺特性, Java 代碼編譯出來後形成的 class 文件中存儲的是 byte code,jvm 通過解釋的方式形成字節碼命令,這種方式與 C/C++ 編譯成二進制的方式  相比要慢不少。

  為了解決程序解釋執行的速度問題, jvm 中內置了兩個運行時編譯器,如果一段 Java 代碼被調用達到一定次數,就會判定這段代碼為熱點代碼(hot spot code),並將這段代  碼交給 JIT 編譯器編譯成本地代碼,從而提高運行速度。所以隨著代碼被編譯的越來越徹底,運行速度應當是越來越快。

  而 Java 運行器編譯的最大缺點就是它進行編譯時需要消耗程序正常的運行時間,也就是 compile time.

Class Loader Time

技術分享

表示 class 的 load 和 unload 時間

GC Time

技術分享
22 collections 表示自監視以來一共經歷了 22 次GC, 包括 Minor GC 和 Full GC
2.030s 表示 gc 共花費了 2.030s
Last Cause: Allocation Failure 表示上次發生 gc 的原因: 內存分配失敗

Eden Space

技術分享

Eden Space (340.500M,185.000M): 91.012M
表示 Eden Space 最大可分配空間 340.500M
Eden Space 當前分配空間 185.000M
Eden Space 當前占用空間 91.012M
21 collections, 1.012s
表示當前新生代發生 GC 的次數為 21 次, 共占用時間 1.012s

Survivor 0 and Survivor 1

技術分享

S0 和 S1 肯定有一個是空閑的,這樣才能方便執行 minor GC 的操作,但是兩者的最大分配空間是相同的。並且在 minor GC 時,會發生 S0 和S1 之間的切換。
Survivor 1 (113.500M, 75.000M) : 36.590M
表示 S1 最大分配空間 113.500M, 當前分配空間 75.000M, 已占用空間 36.590M

Old Gen

  技術分享

  Old Gen (682.500M, 506.500M) : 233.038M, 1 collections, 1.018s

(682.500M, 506.500M) : 233.038M

表示 OldGen 最大分配空間 682.500M, 當前空間 506.500M, 已占用空間 233.038M

1 collections, 1.018s 表示老年代共發生了 1次 GC, 耗費了 1.018s 的時間。

老年代 GC 也叫做 Full GC, 因為在老年代 GC 時總是會伴隨著 Minor GC, 合起來就稱為 Full GC。

Perm Gen

  技術分享

  Perm Gen (256.000M, 227.500M) : 122.800M

  256.000M 表示最大可用空間,可以使用 -XX:MaxPermSize 指定永久代最大上限

227.500M 表示當前永久代空間

122.800M 表示永久代當前占用空間

對 HotSpot 虛擬機來說,可以把永久代直接等同於方法區,其中會存儲已經被jvm 加載的類信息,常量,靜態變量,即時編譯器編譯後的代碼等數據。

  

  

  

visualvm 插件 visual gc 使用介紹