sualVM是JDK自帶的一個用於Java程序性能分析的工具java
在JDK安裝目錄的bin文件夾下名稱爲 jvisualvm.exe工具
在左側選擇應用性能
(1)概述spa
應用程序和運行時環境的基本信息插件
基本參數線程
PID:應用程序的進程ID
主機:應用程序運行的系統地址
主類:運行了main方法的類
參數:應用啓動時所傳遞的參數信息
JVM:當前的JVM信息
Java:當前使用的JDK信息
Java Home:JDK的位置
JVM標誌:啓動JDK時JVM使用的的標誌
出現OOME時生產堆dump:當前出現OOME時生產堆dump功能的開啓/禁用狀態
保存的數據3d
顯示VisualVM存儲的當前應用程序的信息code
詳細信息blog
JVM參數:配置的JVM啓動的參數信息進程
系統屬性 :JVM運行的系統屬性
(2)監視
展現監聽的當前應用程序的總體狀況
CPU:CPU的使用百分比
內存:內存的佔用狀況,包括內存大小、最大值和已經使用的大小
堆:堆內存的大小和堆內存使用狀況
Metaspace:元空間內存的使用狀況
類:顯示了已經加載的類數量和共享類的數量
線程:顯示了應用程序在JVM中生存和守護線程的數量
堆dump:執行堆dump,在新的標籤頁打開,查看dump的詳細信息
(3)線程
展現了應用程序的線程數據,包括全部線程數、活動線程數、完成線程數
線程dump:執行線程dump,在新標籤頁打開結果
(4)抽樣器
抽取CPU和內存的樣例數據
設置——設置抽樣參數
CPU抽樣:
CPU樣例:展現了方法級別CPU性能(執行的時間及佔比)
線程CPU時間:反映了線程執行佔用cpu的時間和佔比
內存抽樣
堆柱狀圖:展現了內存佔用狀況
每一個線程分配:展現了每一個線程分配的內存以及佔比
(5)Profile
啓動和中止本地應用程序的概要分析會話
CPU:點CPU按鈕,啓動一個 CPU性能分析會話 ,顯示 CPU 的使用率、方法的執行效率和頻率等相關數據
內存:點擊「內存」按鈕將啓動一個內存分析會話,等 VisualVM 收集和統計完相關性能數據信息,將會顯示在性能分析結果
(6)Visual GC
安裝插件
工具——》插件
就會出現Visual CG 的標籤
Spaces:分爲 Perm(Permanent Generation) 永久代, Old 老年代和新生代
A.永久代
經過VM Args設置,eg:
-XX:PermSize=1024m (初始值)
-XX:MaxPermSize=1024m (最大值)
B.java堆(java heap)——Old 老年代+新生代
經過VM Args設置,eg:
-xms2048m (初始堆內存)
-Xmx2048m (最大堆內存)
-XX:+HeapDumpOnOutofMemoryError (內存異常打印dump)
-Xmn800m (新生代內存)
-XX:SurvivorRatio=8 (新生代內存分配比例(8:1:1))
由於Heap分爲新生代跟老年代,因此2018M-800M=1218M,老年代就是1218M(初始內存跟最大內存最好相等,防止內存不夠時擴充內存或者Full GC,致使性能下降)
新生代:Eden 區+S0 survivor 區+S1 survivor 區,默認是8:1分配內存
Graphs:以時間爲橫座標的狀態面板
Compile Time:編譯時間表示虛擬機的 JIT 編譯器編譯熱點代碼的耗時
Class Loader Time: class 的 load 和 unload 時間
GC Time:
18 collections ——自監視以來共 22 次GC, 包括 Minor GC 和 Full GC
456.653ms 表示 gc 共花費了456.653ms Last Cause: Allocation Failure 上次發生 gc 的緣由爲內存分配失敗
Eden Space:
Eden Space (1.328G,204.000M): 128.430M——Eden Space 最大可分配空間 340.500M,當前分配空間 185.000M,當前佔用空間 91.012M
14 collections, 153.307ms——當前新生代發生 GC 的次數爲14次, 共佔用時間 153.307ms
Survivor 0,Survivor 1:
S0 和 S1 有一個是空閒的,這樣方便執行 minor GC,他們的最大分配空間是相同的,在 minor GC 時,S0 和S1 會互相切換
Survivor 1 (453.500M, 33.500M) : 3.814M——S1 最大分配空間 453.500M, 當前分配空間33.500M, 已佔用空間3.814M
Old Gen:
Old Gen (2.659G, 370.000M) :50.940M—— OldGen最大分配空間2.659G, 當前空間370.000M, 已佔用空間50.940M
4 collections, 306.346ms ——老年代發生了 4次 GC, 耗費了306.346ms的時間
老年代 GC 也叫作 Full GC, 在老年代 GC 時會伴隨着 Minor GC
Metaspace:
Perm Gen (1.096G, 109.375M) : 106.630M——最大可用空間1.096G,當前永久代空間109.375M,已佔用空間106.630M
注:
若是顯示指定-XX:+UseParallelGC --新生代並行、老年代串行收集器 ,histogram柱狀圖會不支持當前收集器