文章目錄
- 前言
- java程式啟動參數-D
- JDK自帶工具包
- 1、javap(反彙編器)
- 2、jps(虛拟機程序螢幕)
- 3、jstack(jvm堆棧跟蹤工具)
- 4、jconsole(可視化管理工具)
- 5、java
- 6、jar
- 其他工具
- jad(更強大的反彙編工具)
- 參考文章
前言
本篇部落格是隻要是對JDK工具使用的筆記,若文章中出現相關問題,請指出!
所有部落格檔案目錄索引:部落格目錄索引(持續更新)
java程式啟動參數-D
用于設定系統屬性值。相當于添加到
System
類中的
props
。
public final class System {
private static Properties props;
//根據key來擷取對應的系統屬性
public static String getProperty(String key) {
checkKey(key);
SecurityManager sm = getSecurityManager();
if (sm != null) {
sm.checkPropertyAccess(key);
}
return props.getProperty(key);
}
//可設定對應的鍵值對
public static String setProperty(String key, String value) {
checkKey(key);
SecurityManager sm = getSecurityManager();
if (sm != null) {
sm.checkPermission(new PropertyPermission(key,
SecurityConstants.PROPERTY_WRITE_ACTION));
}
return (String) props.setProperty(key, value);
}
}
執行個體示範
在執行位元組碼檔案時,給指令後添加參數如:
java -DChanglu=666"
- 設定虛拟機參數
@Test
public void test01() throws IOException {
//調用該方法即可擷取到changlu鍵對應的值666
String str = System.getProperty("changlu");
System.out.println(str);
}
JDK自帶工具包
1、javap(反彙編器)
在jdk的bin目錄下的一個反彙編器,可以檢視編譯器為我們生成的位元組碼。進而了解編譯器在執行位元組碼的很多内部工作。
簡單編譯位元組碼檔案
首先使用
javac 類名.java
将源代碼轉為位元組碼檔案(.class字尾)。
反編譯指令:
javap 指定類.class
進行反編譯。
各種參數:
-help --help -? 輸出此用法消息
-version 版本資訊,其實是目前javap所在jdk的版本資訊,不是class在哪個jdk下生成的。
-v -verbose 輸出附加資訊(包括行号、本地變量表,反彙編等詳細資訊)
-l 輸出行号和本地變量表
-public 僅顯示公共類和成員
-protected 顯示受保護的/公共類和成員
-package 顯示程式包/受保護的/公共類 和成員 (預設)
-p -private 顯示所有類和成員
-c 對代碼進行反彙編
-s 輸出内部類型簽名
-sysinfo 顯示正在處理的類的系統資訊 (路徑, 大小, 日期, MD5 散列)
-constants 顯示靜态最終常量
-classpath <path> 指定查找使用者類檔案的位置
-bootclasspath <path> 覆寫引導類檔案的位置
執行個體:
-
:代碼進行反編譯 javap -c class檔案名
-
:輸出附加資訊(包括行号、本地變量表,反彙編等詳細資訊) javap -v class檔案名
2、jps(虛拟機程序螢幕)
jps(Java Virtual Machine Process Status Tool):顯示目前系統的java程序情況及程序id,主要在linux/unix平台上檢視目前程序運作的相關資訊,包含程序号。
實際案例:
1、
jps
:程序号+類名
2、
jps -l
:程序号+全限定類名(推薦使用)
3、
jps -q
:程序号
3、jstack(jvm堆棧跟蹤工具)
jstack
:java虛拟機自帶的一種堆棧跟蹤工具,可追蹤指定的pid程序列印其中的堆棧資訊。
實際案例:
1、
jstack pid 程序号
:檢視指定程序号的堆棧資訊,常用于排查死鎖問題,配合jps擷取到程序号。
4、jconsole(可視化管理工具)
Jconsole
(Java Monitoring and Management Console):一種基于JMX的可視化監視、管理工具。能夠進行線程監控、記憶體監控。
執行bin目錄下的jconsole工具即可:
jconsole
使用流程
選擇指定的程序進行連接配接(該程序需要啟動):
即可排查正在運作中的項目出現的死鎖情況:
5、java
啟動jar包
使用以下指令執行jar包時,會用到目錄META-INF\MANIFEST.MF檔案,在該檔案中有一個Main-Class: xxx,說明是java -jar會執行的類
// 目前ssh視窗被鎖定,可按CTRL + C打斷程式運作,或直接關閉視窗,程式退出
java -jar xxxxx.jar
//目前ssh視窗不被鎖定,但是當視窗關閉時,程式中止運作
java -jar xxxxx.jar &
//意思是不挂斷運作指令,當賬戶退出或終端關閉時,程式仍然運作
nohup Java -jar xxxxxx.jar &
6、jar
jar -cvf my.jar com\changlu\JVM\C.class
:打包指定路徑下指定包名中的Class類到名為my.jar的jar包中。
- com\changlu\JVM\C.class則是指代目前目錄下對應檔案的指定類。
其他工具
jad(更強大的反彙編工具)
官網:https://varaneckas.com/jad/
相關指令文章:反編譯工具jad 指令說明
windows
平台:下載下傳完之後直接解壓即可。
Linux
平台:解壓之後,通過使用指令
如何使用?
- 将jad工具放置到需要反編譯的目錄下,執行指令
(反編譯成java檔案到目前目錄)。jad -sjava Class檔案名
參考文章
[1]. javap的基本用法
[2]. java程式啟動參數-D詳解
[3]. 反編譯工具jad 指令說明
[4]. java指令–jstack 工具
[5]. jps指令的使用方法
[4]. java指令–jstack 工具
[5]. jps指令的使用方法
[6]. JConsole可視化工具介紹
我是長路,感謝你的耐心閱讀。如有問題請指出,我會積極采納!
歡迎關注我的公衆号【長路Java】,分享Java學習文章及相關資料
Q群:851968786 我們可以一起探讨學習
注明:轉載可,需要附帶上文章連結