天天看點

JDK工具包使用

文章目錄

  • ​​前言​​
  • ​​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"​

JDK工具包使用
  • 設定虛拟機參數
@Test
public void test01() throws IOException {
    //調用該方法即可擷取到changlu鍵對應的值666
    String str = System.getProperty("changlu");
    System.out.println(str);
}      
JDK工具包使用

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>    覆寫引導類檔案的位置      

執行個體:

  1. ​ javap -c class檔案名​

    ​:代碼進行反編譯
  2. ​ javap -v class檔案名​

    ​:輸出附加資訊(包括行号、本地變量表,反彙編等詳細資訊)

2、jps(虛拟機程序螢幕)

jps(Java Virtual Machine Process Status Tool):顯示目前系統的java程序情況及程序id,主要在linux/unix平台上檢視目前程序運作的相關資訊,包含程序号。

實際案例:

1、​

​jps​

​:程序号+類名

JDK工具包使用

2、​

​jps -l​

​:程序号+全限定類名(推薦使用)

JDK工具包使用

3、​

​jps -q​

​:程序号

JDK工具包使用

3、jstack(jvm堆棧跟蹤工具)

​jstack​

​:java虛拟機自帶的一種堆棧跟蹤工具,可追蹤指定的pid程序列印其中的堆棧資訊。

實際案例:

1、​

​jstack pid 程序号​

​:檢視指定程序号的堆棧資訊,常用于排查死鎖問題,配合jps擷取到程序号。

4、jconsole(可視化管理工具)

​Jconsole ​

​(Java Monitoring and Management Console):一種基于JMX的可視化監視、管理工具。能夠進行線程監控、記憶體監控。

執行bin目錄下的jconsole工具即可:​

​jconsole​

使用流程

選擇指定的程序進行連接配接(該程序需要啟動):

JDK工具包使用
JDK工具包使用
JDK工具包使用
JDK工具包使用

即可排查正在運作中的項目出現的死鎖情況:

JDK工具包使用

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 指令說明

JDK工具包使用

​windows​

​平台:下載下傳完之後直接解壓即可。

​Linux​

​平台:解壓之後,通過使用指令

如何使用?

  • 将jad工具放置到需要反編譯的目錄下,執行指令​

    ​jad -sjava Class檔案名​

    ​(反編譯成java檔案到目前目錄)。

參考文章

[1]. javap的基本用法

[2]. java程式啟動參數-D詳解

[3]. 反編譯工具jad 指令說明

[4]. java指令–jstack 工具

[5]. jps指令的使用方法

[4]. java指令–jstack 工具

[5]. jps指令的使用方法

[6]. JConsole可視化工具介紹

我是長路,感謝你的耐心閱讀。如有問題請指出,我會積極采納!

歡迎關注我的公衆号【長路Java】,分享Java學習文章及相關資料

Q群:851968786 我們可以一起探讨學習

注明:轉載可,需要附帶上文章連結