天天看點

每個Java開發者都應該知道的5個JDK工具

目前,有許多工具可以綁定到java jdk上面,其中java.exe和javac.exe是每位java工程師的必 備武器,與此同時,還有許多其它java jdk工具呈現在大家眼前。大多數java程式員都沒有使用過這些工具,但如果使用,它們會讓你的工作事半功倍。

每個Java開發者都應該知道的5個JDK工具

javap是一個java類檔案反彙程式設計式,可以檢視java編譯器生成的位元組碼,是分析代碼的一個好工具。讓我們用javap來編譯這段hello world代碼,再分解它。

每個Java開發者都應該知道的5個JDK工具

public class helloworld {  

    public static void main(string... args) {  

        system.out.println("hello world!");  

    }  

}  

c:\users\cycle\desktop>javap helloworld

我沒有傳遞任何參數,隻是運作了javap這個工具,就得到了上面這個結果。預設情況下,它會輸出java類的package,protected,public字段和方法。

每個Java開發者都應該知道的5個JDK工具

compiled from "helloworld.java"  

  public helloworld();  

  public static void main(java.lang.string...);  

c:\users\cycle\desktop>javap -c helloworld

如果傳遞參數-c到javap裡面,便會得到上面這個結果。這是一條非常好的資訊,這樣輸出的指令可以幫助我們更好地了解jvm。 

每個Java開發者都應該知道的5個JDK工具

    code:  

       0: aload_0  

       1: invokespecial #1                  // method java/lang/object."":()v  

       4: return  

       0: getstatic     #2                  // field java/lang/system.out:ljava/io/printstream;  

       3: ldc           #3                  // string hello world!  

       5: invokevirtual #4                  // method java/io/printstream.println:(ljava/lang/string;)v  

       8: return  

jvisualvm是一個java虛拟機監控和分析工具,該工具提供了一個圖形界面視窗,并且可以直覺的了解java應用程式的運作時資訊。jvisualvm內建了許多工具,比如像jmp、jinfo、jstat、jstack、jconsole等。自從jdk 6 update 7以後已經作為jdk的一部分。 

每個Java開發者都應該知道的5個JDK工具

jcmd主要用來把診斷指令請求發送到java jvm中,當jvm程序中沒有jcmd參數清單時,jcmd就會立即運作。這相當于jps工具,我開始啟動jconsole,并且把它作為參數傳遞到jcmd,得到如下結果,這個也可以通過程序id(pid)實作。 

c:\users\cycle>jcmd jconsole vm.uptime  3344:289.977 s

vm.uptime顯示了java應用程式具體運作時間。 

在調試的時候,下面的參數可以用于并發鎖的線程堆棧溢出。

jcmd <pid> thread.print -l

jhat的全稱是java heap analysis tool。它主要是用來解析和浏覽堆檔案,jhat有時更像是一個可視化工具。jhat解析堆存儲( heap dump)并啟動一個webserver,然後使用者可以在浏覽器下檢視堆。jhat支援對象查詢語言(oql)和一些預先設計查詢。oql幫助可能在 

<a target="_blank" href="http://localhost:7000/oqlhelp/">http://localhost:7000/oqlhelp/</a>

jmap工具來生成堆轉儲,我們應該使用-dump參數,下面jhat工具可以使用的參數清單: 

我給jconsole應用程式建立了一個堆轉儲檔案,并使用以下指令來運作程序id 3344:

jmap -dump:format=b,file=heap.bin 3344

現在,堆轉儲檔案準備就緒,運作下面指令并且會啟動一個服務: 

在控制台輸出結果:

在浏覽器中輸入:http://localhost:7000/後便會出來堆轉儲的詳細情況:

每個Java開發者都應該知道的5個JDK工具

例如,還可以在http://localhost:7000/histo/檢視堆記憶體柱狀圖。

作為jvm融合戰略的一部分,主要用來統一hotspot、jrockit vms。目前,jrockit mission control在标準版java se中已經可以使用。java mission control(jmc)與java flight recorder一起工作,适用于hotspot jvm,用來記錄核心資料和事件。它是一個調優工具,并且适用于oracle jdk。一旦出現問題,這些資料就可以用來分析。 

開發者可以使用jmc指令來建立jmc工具。 

每個Java開發者都應該知道的5個JDK工具
每個Java開發者都應該知道的5個JDK工具