VisualVM是一款集成了多個JDK命令行的可視化工具,可以有效地對JAVA應用程序進行性能分析、優化以及調整等操作。通常來說都用來對JAVA應用程序做性能分析和調優,內存優化、CPU分析、線程分析、快照分析、轉儲分析等多項非常強而有效的功能,它還支持在MBeans上進行瀏覽和操作,有需要用到這款VisualVM java調優工具的用戶快快前來獲取吧!

安裝方法
VisualVM 是一個性能分析工具,自從 JDK 6 Update 7 以后已經作為 Oracle JDK 的一部分,位于 JDK 根目錄的 bin 文件夾下。VisualVM 自身要在 JDK6 以上的版本上運行,但是它能夠監控 JDK1.4 以上版本的應用程序。下面主要介紹如何安裝 VisualVM 以及各種 VisualVM 上的插件。
一、安裝VisualVM
1、將 VisualVM 安裝程序解壓縮到本地系統。
2、導航至 VisualVM 安裝目錄的 bin 目錄,然后啟動 jvisualvm.exe。
二、安裝 VisualVM 上的插件
VisualVM 插件中心提供很多插件以供安裝向 VisualVM 添加功能。可以通過 VisualVM 應用程序安裝,或者從 VisualVM 插件中心手動下載插件,然后離線安裝。另外,用戶還可以通過下載插件分發文件 (.nbm 文件 ) 安裝第三方插件為 VisualVM 添加功能。
1、VisualVM 插件中心安裝插件安裝步驟 :
從主菜單中選擇“工具”>“插件”。
在“可用插件”標簽中,選中該插件的“安裝”復選框。單擊“安裝”。

逐步完成插件安裝程序。
2、從主菜單中選擇“工具”>“插件”。
在“已下載”標簽中,點擊"添加插件"按鈕,選擇已下載的插件分發文件 (.nbm) 并打開。

選中打開的插件分發文件,并單擊"安裝"按鈕,逐步完成插件安裝程序。
VisualVM功能
一、性能分析的主要方式
1.監視:監視是一種用來查看應用程序運行時行為的一般方法。通常會有多個KKX視圖(View)分別實時地顯示 CPU 使用情況、內存使用情況、線程狀態以及其他一些有用的信息,以便用戶能很快地發現問題的關鍵所在。
2.轉儲:性能分析工具從內存中獲得當前狀態數據并存儲到文件用于靜態的性能分析。Java 程序是通過在啟動 Java 程序時添加適當的條件參數來觸發轉儲操作的。它包括以下三種:
系統轉儲:JVM 生成的本地系統的轉儲,又稱作核心轉儲。一般的,系統轉儲數據量大,需要平臺相關的工具去分析,如 Windows 上的 windbg 和 Linux 上的 gdb.
Java 轉儲:JVM 內部生成的格式化后的數據,包括線程信息,類的加載信息以及堆的統計數據。通常也用于檢測死鎖。
堆轉儲:JVM 將所有對象的堆內容存儲到文件。
二、快照:
應用程序啟動后,性能分析工具開始收集各種運行時數據,其中一些數據直接顯示在監視視圖中,而另外大部分數據被保存在內部,直到用戶要求獲取快照,基于這些保存的數據的統計信息才被顯示出來。快照包含了應用程序在一段時間內的執行信息,通常有 CPU 快照和內存快照兩種類型。
CPU 快照:主要包含了應用程序中函數的調用關系及運行時間,這些信息通常可以在 CPU 快照視圖中進行查看。
內存快照:主要包含了內存的分配和使用情況、載入的所有類、存在的對象信息及對象間的引用關系等。這些信息通常可以在內存快照視圖中進行查看。
三、性能分析:
性能分析是通過收集程序運行時的執行數據來幫助開發人員定位程序需要被優化的部分,從而提高程序的運行速度或是內存使用效率,主要有以下三個方面:
CPU 性能分析:CPU 性能分析的主要目的是統計函數的調用情況及執行時間,或者更簡單的情況就是統計應用程序的 CPU 使用情況。通常有 CPU 監視和 CPU 快照兩種方式來顯示 CPU 性能分析結果。
內存性能分析:內存性能分析的主要目的是通過統計內存使用情況檢測可能存在的內存泄露問題及確定優化內存使用的方向。通常有內存監視和內存快照兩種方式來顯示內存性能分析結果。
線程性能分析:線程性能分析主要用于在多線程應用程序中確定內存的問題所在。一般包括線程的狀態變化情況,死鎖情況和某個線程在線程生命期內狀態的分布情況等
VisualVM特色
1、運行內存分析
VisualVM根據檢驗JVM中載入的類和對象信息內容等協助大家分析運行內存應用狀況,我們可以根據VisualVM的監控標識和Profiler標簽對應用程序開展運行內存分析。
2、CPU分析
VisualVM可以監管應用程序在一段時間的CPU的運用狀況,表明CPU的利用率、方式的運行高效率和頻率等有關數據信息協助大家發覺應用程序的性能短板。我們可以根據VisualVM的監控標識和Profiler標簽對應用程序開展CPU性能分析。
3、進程分析
Java語言可以有效的完成線程同步應用程序。在我們對一個線程同步應用程序開展校準或是開發設計中后期做性能調優的情況下,通常必須掌握當今程序流程中全部進程的運轉情況,是不是有死鎖、熱鎖等情形的產生,進而分析系統軟件很有可能存在的不足。
4、快照分析
我們可以應用VisualVM的快照作用轉化成隨意個性能分析快照并存放到當地來協助大家開展性能分析。快照為捕獲應用程序性能分析數據信息給予了一個很快捷的方法由于快照一旦轉化成可以在無論怎樣無網開啟和查詢,還可以互相核稿。
VisualVM給予了二種類別的快照:
Profiler快照:當有一個性能分析對話(運行內存或是CPU)正在進行時,我們可以根據性能分析結果菜單欄的“快照”按鍵轉化成Profiler快照捕獲那時候的性能分析數據信息。
應用程序快照:我們可以鼠標右鍵點一下左邊Applications對話框中應用程序連接點,挑選“應用程序快照”為轉化成一個應用程序快照。應用程序快照會搜集某一時時刻刻的堆轉儲,進程轉儲和Profiler快照,與此同時也會捕獲JVM的一些基本資料。
5、轉儲作用
進程轉儲的產生與分析:VisualVM可以對已經運作的當地應用程序轉化成進程轉儲,把主題活動進程的局部變量足跡打印出出去,協助大家合理掌握進程運作的狀況,確診死鎖、應用程序偏癱等問題。
堆轉儲的產生與分析:VisualVM可以轉化成堆轉儲,統計分析某一特殊時時刻刻JVM中的目標信息內容,協助大家分析目標的引入關聯、是不是有內存泄漏狀況的出現等。
更新日志
GH-260: 完全支持在JDK 16上運行并監控/描述Java 16進程
GH-262: 增加對蘋果M1的支持
GH-270: 從以前的VisualVM版本導入插件
GH-275: 增加關于啟用模塊的信息
GH-279: 增加保留尺寸計算的部分進度
GH-254: 更新器的品牌效應。
Python的堆棧跟蹤
HeapViewer - 邏輯值增加了Instant, Attributes$Name, FDBigInteger, java.lang.module
HeapViewer - java.util類的邏輯值--集合現在顯示元素的數量
Gradle的應用識別器
更新了JDK工具的應用識別器
API變更。
GH-282: 在org.graalvm.visualvm.lib.jfluid.heap包的公共API中添加泛型。
GH-283: 增加了從實例中獲取Heap的方法。
修復了Bug。
GH-127: G1GC的最大堆不正確
GH-257: "打開快照失敗。"由于沒有完全讀取壓縮數據
GH-263: 保留的大小計算為負數
GH-268: 檢測VisualVM是否在Eclipse OpenJ9上運行
GH-272: 計算引用時沒有進度條
GH-273: NPE:無法調用 "java.lang.management.MemoryMXBean.gc()"
GH-274: 邏輯值:'...'被添加到完整的字符串中
GH-276: 缺少已知的阻塞方法
GH-277: 不正確的水平滾動
GH-278:LongBuffer.startReading()處的NPE。
GH-280: 在MacOS上選擇背景顏色不正確
HeapViewer--PythonModule、SourceImpl$Key、InetSocketAddress、BigDecimal的邏輯值固定。
內存采樣器--改進了重載下的刷新功能
改進了對IntelliJ應用程序的檢測