javac
javap
http://www.hollischuang.com/archives/1107
javap可以用于反編譯和查看編譯器編譯后的字節(jié)碼。平時(shí)一般用javap -c比較多部宿,該命令用于列出每個(gè)方法所執(zhí)行的JVM指令茬高,并顯示每個(gè)方法的字節(jié)碼的實(shí)際作用惰聂〖丫В可以通過字節(jié)碼和源代碼的對(duì)比愚屁,深入分析java的編譯原理奸笤,了解和解決各種Java原理級(jí)別的問題。
-help 幫助
-l 輸出行和變量的表
-public 只輸出public方法和域
-protected 只輸出public和protected類和成員
-package 只輸出包碴开,public和protected類和成員毅该,這是默認(rèn)的
-p -private 輸出所有類和成員
-s 輸出內(nèi)部類型簽名
-c 輸出分解后的代碼,例如潦牛,類中每一個(gè)方法內(nèi)眶掌,包含java字節(jié)碼的指令,
-verbose 輸出棧大小巴碗,方法參數(shù)的個(gè)數(shù)
-constants 輸出靜態(tài)final常量
Jps 顯示當(dāng)前系統(tǒng)的java進(jìn)程情況朴爬,及其id號(hào)
jps位于jdk的bin目錄下,其作用是顯示當(dāng)前系統(tǒng)的java進(jìn)程情況橡淆,及其id號(hào)召噩。 jps相當(dāng)于Solaris進(jìn)程工具ps。不象”pgrep java”或”ps -ef grep java”逸爵,jps并不使用應(yīng)用程序名來查找JVM實(shí)例具滴。因此,它查找所有的Java應(yīng)用程序师倔,包括即使沒有使用java執(zhí)行體的那種(例如构韵,定制的啟動(dòng) 器)。另外趋艘,jps僅查找當(dāng)前用戶的Java進(jìn)程贞绳,而不是當(dāng)前系統(tǒng)中的所有進(jìn)程。
jstack 用于生成java虛擬機(jī)當(dāng)前時(shí)刻的線程快照 http://www.hollischuang.com/archives/110
hollis@hos:~$ jstack -help
Usage:
jstack [-l] <pid>
(to connect to running process)
jstack -F [-m] [-l] <pid>
(to connect to a hung process)
jstack [-m] [-l] <executable> <core>
(to connect to a core file)
jstack [-m] [-l] [server_id@]<remote server IP or hostname>
(to connect to a remote debug server)
Options:
-F to force a thread dump. Use when jstack <pid> does not respond (process is hung)
-m to print both java and native frames (mixed mode)
-l long listing. Prints additional information about locks
-h or -help to print this help message
-F當(dāng)’jstack [-l] pid’沒有相應(yīng)的時(shí)候強(qiáng)制打印棧信息
-l長列表. 打印關(guān)于鎖的附加信息,例如屬于java.util.concurrent的ownable synchronizers列表. -m打印java和native c/c++框架的所有棧信息.
-h | -help打印幫助信息 pid 需要被打印配置信息的java進(jìn)程id,可以用jps查詢.
jstack是java虛擬機(jī)自帶的一種堆棧跟蹤工具致稀。
jstack用于生成java虛擬機(jī)當(dāng)前時(shí)刻的線程快照冈闭。線程快照是當(dāng)前java虛擬機(jī)內(nèi)每一條線程正在執(zhí)行的方法堆棧的集合,生成線程快照的主要目的是定位線程出現(xiàn)長時(shí)間停頓的原因抖单,如線程間死鎖萎攒、死循環(huán)、請(qǐng)求外部資源導(dǎo)致的長時(shí)間等待等矛绘。 線程出現(xiàn)停頓的時(shí)候通過jstack來查看各個(gè)線程的調(diào)用堆棧耍休,就可以知道沒有響應(yīng)的線程到底在后臺(tái)做什么事情,或者等待什么資源货矮。 如果java程序崩潰生成core文件羊精,jstack工具可以用來獲得core文件的java stack和native stack的信息,從而可以輕松地知道java程序是如何崩潰和在程序何處發(fā)生問題囚玫。另外喧锦,jstack工具還可以附屬到正在運(yùn)行的java程序中读规,看到當(dāng)時(shí)運(yùn)行的java程序的java stack和native stack的信息, 如果現(xiàn)在運(yùn)行的java程序呈現(xiàn)hung的狀態(tài),jstack是非常有用的燃少。
So,jstack命令主要用來查看Java線程的調(diào)用堆棧的束亏,可以用來分析線程問題(如死鎖)。