本文非原創,翻譯自Java Garbage Collection Monitoring and Analysis
在Java中爲對象分配和釋放內存空間都是由垃圾回收線程自動執行完成的。和C語言不同的是Java程序員不須要手動寫垃圾回收相關的代碼。這是使得Java如此流行,同時也是Java能幫助程序員寫出更好的Java應用的優勢之一。java
在這篇Java垃圾回收系列文章中,讓咱們看下一些監控和分析垃圾回收的工具。而後用工具嘗試監控和分析一個例子。程序員
Java VisualVMsegmentfault
Naarad工具
GCViewer性能
IBM Pattern Modeling and Analysis Tool for Java Garbage Collectorspa
HPjmeter插件
IBM Monitoring and Diagnostic Tools for Java – Garbage Collection and Memory命令行
Visualizer線程
Verbose GC Analyzer翻譯
Java VisualVM是在Java SE SDK安裝時免費提供的。看下你的Java JDK安裝目錄下的/bin目錄,Javajdk1.8.0bin。此目錄下有許多其餘工具包括javac和java工具,jvisualvm就是其中一個。
Java VisualVM對運行中的Java應用提供了可視化的信息展現。它是不少工具的整合包,像工具JConsole,jstat,jinfo,jstack以及jmap如今都是Java VisualVM的一部分。
Java VisualVM能夠用來 - 生成和分析堆內存的dump - 觀察和操做MBeans - 監控垃圾回收 - 內存和CPU性能分析
jvisualvm已經包含在了JDK的bin目錄下,若是以設置環境變量path,則能夠直接在命令行中運行jvisualvm,將出現以下啓動界面
咱們須要安裝visual GC 插件纔能有個堆Java GC線程的漂亮和有價值的視覺感覺。在上面的啓動界面中點擊工具->插件->可用插件->Visual GC
(不知道什麼緣由,這張圖片就是上傳不成功,只有附上外鏈地址將就看了,抱歉)
安裝。
如今能夠監控垃圾回收過程了。開啓你的Java應用程序,Java VisualVM會自動檢測並將其顯示到界面上。在左邊「應用程序」面板的「本地」節點下面,全部本地運行的Java應用都會被列舉出來。
Java VisualVM本身自己也是一個Java應用程序,所以它自身也被列了出來。做爲本文的目的咱們將監控VisualVM應用自己的GC過程。
雙擊「本地」節點下的VisualVM圖標。
這樣應用程序的監控面板會在右邊打開。面板上有多個標籤,每一個裏面展現了與應用程序性能相關的方面。因爲咱們如今主要關注「Visual GC」,so,點之。
上面的圖片顯示了Old,Eden,S0,S1使用的內存空間。下面的圖表顯示了各個部分申請和釋放內存的詳細信息。它以設定的刷新頻率不停地跟新。
上圖顯示的是一個正常運行的程序。當發生內存泄露或者不正常的操做時,能夠從圖形自己明顯地看出來。至少咱們能夠知道程序中存在和對象內存分配和垃圾回收相關的問題。而後利用其餘標籤如「Threads」中提供的信息和Thread Dump咱們能夠縮小發生問題的範圍。
在「監視」標籤中,咱們能夠看到以時間線發展的內存使用概況圖。這裏有個「執行垃圾回收」按鈕能夠調用垃圾回收過程。
在「抽樣器」標籤中咱們能夠開始內存和CPU分析工做。抽樣器會實時顯示各個實例的使用狀況。它能夠幫助肯定性能問題到底發生在哪裏。
到此爲止,關於Java 垃圾回收的系列文章已經完結了。