摘要:有許許多多的JDK工具呈現(xiàn)在大家面前,但常用的莫過于java.exe、javac.exe、jar等。除了這幾個(gè),還有哪些呢?大家不妨看看本文作者推薦的5個(gè)JDK工具。
JDK是Java語言的軟件開發(fā)工具包,沒有它就無法編譯Java程序。目前,有許許多多的JDK工具呈現(xiàn)在大家面前,但常用的莫過于java.exe、javac.exe、jar等。除了這幾個(gè),還有哪些呢?本文作者Joe擁有多年的Java開發(fā)經(jīng)驗(yàn),其在博客上分享了一篇文章:5 JDK Tools Every Java Developer Should Know,筆者對(duì)其進(jìn)行了編譯,以下為譯文。
目前,有許多工具可以綁定到Java JDK上面,其中java.exe和javac.exe是每位Java工程師的必 備武器,與此同時(shí),還有許多其它Java JDK工具呈現(xiàn)在大家眼前。大多數(shù)Java程序員都沒有使用過這些工具,但如果使用,它們會(huì)讓你的工作事半功倍。
在之前的教程中,我曾介紹過 這些工具。現(xiàn)在,我向大家介紹其中重要的5個(gè)工具。
1.javap
javap是一個(gè)Java類文件反匯編程序,可以查看Java編譯器生成的字節(jié)碼,是分析代碼的一個(gè)好工具。讓我們用javap來編譯這段Hello World代碼,再分解它。
[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
public class HelloWorld {
public static void main(String... args) {
System.out.println("Hello World!");
}
}
C:\Users\Cycle\Desktop>javap HelloWorld
我沒有傳遞任何參數(shù),只是運(yùn)行了javap這個(gè)工具,就得到了上面這個(gè)結(jié)果。默認(rèn)情況下,它會(huì)輸出Java類的package,protected,public字段和方法。
[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
Compiled from "HelloWorld.java"
public class HelloWorld {
public HelloWorld();
public static void main(java.lang.String...);
}
C:\Users\Cycle\Desktop>javap -c HelloWorld
如果傳遞參數(shù)-c到j(luò)avap里面,便會(huì)得到上面這個(gè)結(jié)果。這是一條非常好的信息,這樣輸出的指令可以幫助我們更好地了解JVM。
[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
Compiled from "HelloWorld.java"
public class HelloWorld {
public HelloWorld();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."":()V
4: return
public static void main(java.lang.String...);
Code:
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
}
2.jvisualvm
jvisualvm是一個(gè)Java虛擬機(jī)監(jiān)控和分析工具,該工具提供了一個(gè)圖形界面窗口,并且可以直觀的了解Java應(yīng)用程序的運(yùn)行時(shí)信息。jvisualvm集成了許多工具,比如像jmp、jinfo、jstat、jstack、JConsole等。自從JDK 6 Update 7以后已經(jīng)作為JDK的一部分。
在 Java垃圾回收監(jiān)控和分析這篇文章中,我曾使用jvisualvm,大家不妨過去看看jvisualvm的使用方法。
3.jcmd
jcmd主要用來把診斷命令請(qǐng)求發(fā)送到Java JVM中,當(dāng)JVM進(jìn)程中沒有jcmd參數(shù)列表時(shí),jcmd就會(huì)立即運(yùn)行。這相當(dāng)于jps工具,我開始啟動(dòng)jconsole,并且把它作為參數(shù)傳遞到j(luò)cmd,得到如下結(jié)果,這個(gè)也可以通過進(jìn)程id(pid)實(shí)現(xiàn)。
C:\Users\Cycle>jconsole
C:\Users\Cycle>jcmd JConsole help
3344:
The following commands are available:
JFR.stop
JFR.start
JFR.dump
JFR.check
VM.native_memory
VM.check_commercial_features
VM.unlock_commercial_features
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.run_finalization
GC.run
VM.uptime
VM.flags
VM.system_properties
VM.command_line
VM.version
help
C:\Users\Cycle>jcmd JConsole VM.uptime
3344:289.977 s
VM.uptime顯示了Java應(yīng)用程序具體運(yùn)行時(shí)間。
在調(diào)試的時(shí)候,下面的參數(shù)可以用于并發(fā)鎖的線程堆棧溢出。
jcmd <pid> Thread.print -l
4.jhat
jhat的全稱是Java heap analysis tool。它主要是用來解析和瀏覽堆文件,jhat有時(shí)更像是一個(gè)可視化工具。jhat解析堆存儲(chǔ)( heap dump)并啟動(dòng)一個(gè)webserver,然后用戶可以在瀏覽器下查看堆。jhat支持對(duì)象查詢語言(oql)和一些預(yù)先設(shè)計(jì)查詢。OQL幫助可能在
http://localhost:7000/oql/
http://localhost:7000/oqlhelp/
jmap工具來生成堆轉(zhuǎn)儲(chǔ),我們應(yīng)該使用-dump參數(shù),下面jhat工具可以使用的參數(shù)列表:
C:\Users\Cycle>jhat -help
Usage: jhat [-stack ] [-refs ] [-port ] [-baseline ] [-debug ] [-version] [-h|-help]
-J Pass directly to the runtime system. For
example, -J-mx512m to use a maximum heap size of 512MB
-stack false: Turn off tracking object allocation call stack.
-refs false: Turn off tracking of references to objects
-port : Set the port for the HTTP server. Defaults to 7000
-exclude : Specify a file that lists data members that should
be excluded from the reachableFrom query.
-baseline : Specify a baseline object dump. Objects in
both heap dumps with the same ID and same class will
be marked as not being "new".
-debug : Set debug level.
0: No debug output
1: Debug hprof file parsing
2: Debug hprof file parsing, no server
-version Report version number
-h|-help Print this help and exit
The file to read
For a dump file that contains multiple heap dumps,
you may specify which dump in the file
by appending "#" to the file name, i.e. "foo.hprof#3".
All boolean options default to "true"
我給jconsole應(yīng)用程序創(chuàng)建了一個(gè)堆轉(zhuǎn)儲(chǔ)文件,并使用以下命令來運(yùn)行進(jìn)程id 3344:
jmap -dump:format=b,file=heap.bin 3344
現(xiàn)在,堆轉(zhuǎn)儲(chǔ)文件準(zhǔn)備就緒,運(yùn)行下面命令并且會(huì)啟動(dòng)一個(gè)服務(wù):
jmap -dump:format=b,file=heap.bin 3344
在控制臺(tái)輸出結(jié)果:
C:\Users\Cycle\Desktop>jhat heap.bin
Reading from heap.bin...
Dump file created Sun Nov 16 19:26:35 IST 2014
Snapshot read, resolving...
Resolving 641209 objects...
Chasing references, expect 128 dots..................
Eliminating duplicate references.....................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.
在瀏覽器中輸入:http://localhost:7000/后便會(huì)出來堆轉(zhuǎn)儲(chǔ)的詳細(xì)情況:
例如,還可以在http://localhost:7000/histo/查看堆內(nèi)存柱狀圖。
5.Oracle Java Mission Control
作為JVM融合戰(zhàn)略的一部分,主要用來統(tǒng)一HotSpot、JRockit VMs。目前,JRockit Mission Control在標(biāo)準(zhǔn)版Java SE中已經(jīng)可以使用。Java Mission Control(JMC)與Java Flight Recorder一起工作,適用于HotSpot JVM,用來記錄核心數(shù)據(jù)和事件。它是一個(gè)調(diào)優(yōu)工具,并且適用于Oracle JDK。一旦出現(xiàn)問題,這些數(shù)據(jù)就可以用來分析。
開發(fā)者可以使用jmc命令來創(chuàng)建JMC工具。
來自: javapapers
本站文章版權(quán)歸原作者及原出處所有 。內(nèi)容為作者個(gè)人觀點(diǎn), 并不代表本站贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé),本站只提供參考并不構(gòu)成任何投資及應(yīng)用建議。本站是一個(gè)個(gè)人學(xué)習(xí)交流的平臺(tái),網(wǎng)站上部分文章為轉(zhuǎn)載,并不用于任何商業(yè)目的,我們已經(jīng)盡可能的對(duì)作者和來源進(jìn)行了通告,但是能力有限或疏忽,造成漏登,請(qǐng)及時(shí)聯(lián)系我們,我們將根據(jù)著作權(quán)人的要求,立即更正或者刪除有關(guān)內(nèi)容。本站擁有對(duì)此聲明的最終解釋權(quán)。