Java反編譯工具,主要用於根據Java字節碼文件反彙編爲Java源代碼文件
用法:javap html
用法 | 描述 |
---|---|
javap -help —help -? | 輸出此用法消息 |
javap -version | 版本消息 |
javap -v -verbose | 輸出附加信息 |
javap -l | 輸出行號和本地變量表 |
javap -public | 僅顯示公共類和成員 |
javap -protected | 顯示受保護的/公共類和成員 |
javap -package | 顯示程序包/受保護的/公共類和成員 (默認) |
javap -p -private | 顯示全部類和成員 |
javap -c | 對代碼進行反彙編 |
javap -s | 輸出內部類型簽名 |
javap -sysinfo | 顯示正在處理的類的系統信息 (路徑, 大小, 日期, MD5 散列) |
javap -constants | 顯示最終常量 |
javap -classpath | 指定查找用戶類文件的位置 |
javap -cp | 指定查找用戶類文件的位置 |
javap -bootclasspath | 覆蓋引導類文件的位置 |
jps(Java Virtual Machine Process Status Tool)顯示當前全部Java進程pid的命令
用法:jps [options] [hostid]vue
用法 | 描述 |
---|---|
jps -q | 僅輸出VM標識符 |
jps -m | 輸出main method參數 |
jps -l | 輸出徹底的包名,應用主類名,jar徹底路徑名 |
jps -v | 輸出JVM參數 |
jps -V | 輸出經過flag文件傳遞到JVM的參數 |
jps -Joption | 傳遞參數到JVM,如:-J-Xms512m |
jstat監視Java虛擬機統計信息
用法:jstat - [-t] [-h] [ []]java
用法 | 描述 |
---|---|
jstat -gc pid | 顯示gc的信息,查看gc的次數及時間 |
jstat -gccapacity pid | 內存GC分區中各對象的使用和佔用大小 |
jstat -gcutil pid | 統計gc信息彙總 |
jstat -gcnew pid | 年輕代對象的信息 |
jstat -gcnewcapacity pid | 年輕代對象的信息及其佔用量 |
jstat -gcold pid | 老年代對象的信息 |
jstat -gcoldcapacity pid | 老年代對象的信息及其佔用量 |
jstat -gcpermcapacity pid | perm對象的信息及其佔用量 |
jstat -class pid | 顯示加載class數量,及其所佔空間 |
jstat -compiler pid | 顯示JVM實時編譯的數量等信息 |
jstat -printcompilation pid | 打印當前JVM執行的信息 |
關於命令中表頭等信息的詳細解釋能夠參考 jstat命令手冊 c++
jcmd工具能夠替代jps工具查看本地的JVM信息
用法: jcmd [pid | main-class] command…|PerfCounter.print| git
用法 | 描述 |
---|---|
jcmd | 查看本地的Java進程列表,獲取其pid |
jcmd pid help | 查看其支持的命令列表 |
jcmd pid Thread.print -l | 打印線程棧 |
jcmd pid VM.command_line | 打印啓動命令及參數 |
jcmd pid VM.system_properties | 查看系統屬性內容 |
jcmd pid VM.uptime | 查看虛擬機啓動時間 |
jcmd pid GC.heap_dump data/filename.dump | 查看JVM的Heap Dump |
jcmd pid GC.class_histogram | 查看類的統計信息 |
jcmd pid PerfCounter.print | 查看性能統計 |
jinfo能夠查看運行中JVM的所有參數,還能夠設置部分參數
用法:github
參數/option | 描述說明 |
---|---|
pid | 對應JVM的進程id |
excutable core | 產生core dump文件 |
[server-id@]remote-hostname-or-ip | 遠程的ip或hostname,server-id標記服務的惟一性id |
no option | 輸出所有的參數和系統屬性 |
-flag name | 輸出對應名稱的參數 |
-flag [+/-]name | 開啓/關閉對應名稱的參數 |
-flag name=value | 設定對應名稱的參數 |
-flags | 輸出所有的參數 |
-sysprops | 輸出系統屬性 |
jhat即Java Heap Analyse Tool,是分析Java堆的命令,能夠將堆中的對象以html的形式顯示出來,支持對象查詢語言OQL
用法:jhat [-stack ] [-refs ] [-port ] [-baseline ] [-debug ] [-version] [-h/-help] 算法
用法參數 | 描述說明 |
---|---|
-J | 啓動JVM時傳入啓動參數,如:-J-XMx512m指定運行jhat的JVM使用的最大堆內存爲512m |
-stack false/true | 關閉對象分配調用棧跟蹤,默認爲true |
-refs false/true | 關閉對象引用跟蹤,默認爲true |
-port port-number | 設定jhat服務的端口號,默認爲7000 |
-exclude exclude-file | 指定文件對象查詢時須要排除的數據成員列表,如:指定文件列出了java.lang.String.value,那麼當從某個特定對象計算可達對象列表時,引用路徑涉及java.lang.String.value的都會被排除 |
-baseline file | 指定一個基準堆轉儲在兩個和heap dumps中有相同object id的對象會被標記爲不是新的,其餘對象被標記爲新的,在比較兩個不一樣的堆轉儲時頗有用 |
-debug int | 設置debug級別,0表示不輸出調試信息,值越大表示輸出的debug信息越詳細 |
-version | 啓動後只顯示版本信息就退出 |
jmap會打印Java進程內存中object的狀況,或者將JVM中的堆以二進制輸出成文本
用法:markdown
用法參數 | 描述說明 |
---|---|
無參,會打印目標JVM加載的每一個共享對象的起始地址,映射大小及映射文件的路徑 | |
-dump:[live,] format=b, file= | 使用hprof二進制輸出heap內容到文件,live表明只輸出存活對象 |
-finalizerinfo | 打印正等候回收的對象的信息 |
-heap | 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用狀況 |
-histo[:live] | 打印每一個class的內存信息,JVM的內部類會加上前綴「*」,live表明只輸出存活對象 |
-clstats | 打印classloader和JVM heap方法區的信息,每一個classloader的名字,活潑性,地址,父classloader和加載的class數量(另外內部String數量和佔用內存數量也會打印出來) |
-F | 強迫,在pid沒有響應的時候使用-dump或者-histo參數,在這個模式下,live參數無效 |
-h/-help | 打印輔助信息 |
-J | 傳遞參數給jmap啓動的JVM |
jstack是堆棧跟蹤工具,用於打印給定的Java進程id或core file或遠程調試服務的Java堆棧信息,若是在64位機器上,須要指定選項「-J-64」
用法:app
參數/option | 描述說明 |
---|---|
pid | 對應JVM的進程id |
excutable core | 產生core dump文件 |
[server-id@]remote-hostname-or-ip | 遠程的ip或hostname,server-id標記服務的惟一性id |
-F | 強制打印棧信息 |
-l | 長列表,打印關於鎖的附加信息 |
-m | 打印Java和native c/c++框架的全部棧信息 |
-h/-help | 打印輔助信息 |
jconsole是JDK內置的圖形化Java性能分析工具,能夠在命令行運行。啓動能夠更具Java進程id查看程序的堆使用,線程狀況,類信息等。框架
jvisualvm也是一個能夠圖形化Java性能分析的工具,在JDK6,JDK7,JDK8中存在,JDK9開始就被移除了,固然用戶能夠經過visualvm的官方網站本身下載。