日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java自带工具_深入了解Java JDK自带工具,包括javac、jar、jstack等,实用~

發(fā)布時(shí)間:2025/3/21 java 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java自带工具_深入了解Java JDK自带工具,包括javac、jar、jstack等,实用~ 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在Java JDK的安用裝目錄bin下,有一些有非常實(shí)用的小工具,可用于分析JVM初始配置、內(nèi)存溢出異常等問(wèn)題,我們接下來(lái)將對(duì)些常用的工具進(jìn)行一些說(shuō)明。

JDK小工具簡(jiǎn)介

在JDK的bin目錄下面有一些小工具,如javac、jar、jstack、jstat等,在日常編譯運(yùn)行過(guò)程中有著不少的“額外”功能,那么它們是怎么工作的呢?雖然這些文件本身已經(jīng)被編譯成可執(zhí)行二進(jìn)制文件了,但是其實(shí)它們的功能都是由tools.jar這個(gè)工具包(配合一些dll或者so本地庫(kù))完成的,每個(gè)可執(zhí)行文件都對(duì)應(yīng)一個(gè)包含main函數(shù)入口的java類(有興趣可以閱讀openJDK相關(guān)的源碼(時(shí)代Java的JDK8/Java8源碼在線閱讀),它們的對(duì)應(yīng)關(guān)系如下(更多可去openJDK查閱):

javac com.sun.tools.javac.Main

jar sun.tools.jar.Main

jps sun.tools.jps.Jps

jstat sun.tools.jstat.Jstat

jstack sun.tools.jstack.JStack

...

工具/命令簡(jiǎn)要說(shuō)明

javac - Java代碼編譯命令。

jar - 打包工具命令。

jstack - 查看和跟蹤Java堆棧信息的工具。

jstat - 于監(jiān)控虛擬機(jī)各種運(yùn)行狀態(tài)信息。

tools.jar的使用

我們一般開(kāi)發(fā)機(jī)器上都會(huì)安裝JDK+jre,這時(shí)候,要用這些工具,直接運(yùn)行二進(jìn)制可執(zhí)行文件就行了,但是有時(shí)候,機(jī)器上只有jre而沒(méi)有JDK,我們就無(wú)法用了么?

如果你知道如上的對(duì)應(yīng)關(guān)系的話,我們就可以"構(gòu)造"出這些工具來(lái)(當(dāng)然也可以把JDK安裝一遍,本篇只是介紹另一種選擇),比如我們編寫(xiě)

//Hello.java

public class Hello{

public static void main(String[] args)throws Exception{

while(true){

test1();

Thread.sleep(1000L);

}

}

public static void test1(){

test2();

}

public static void test2(){

System.out.println("invoke test2");

}

}

可以驗(yàn)證如下功能轉(zhuǎn)換關(guān)系

1.編譯源文件:

javac Hello.java => java -cp tools.jar com.sun.tools.javac.Main Hello.java

結(jié)果一樣,都可以生成Hello.class文件

然后我們開(kāi)始運(yùn)行java -cp . Hello

2.查看java進(jìn)程:

jps => java -cp tools.jar sun.tools.jps.Jps

結(jié)果一樣,如下:

4615 Jps

11048 jar

3003 Hello

3.jstat動(dòng)態(tài)查看內(nèi)存:

jstat -gcutil 3003 100 3 => java -cp tools.jar sun.tools.jstat.Jstat -gcutil 3003 100 3

發(fā)現(xiàn)結(jié)果是一樣的

S0 S1 E O M CCS YGC YGCT FGC FGCT GCT

0.00 0.00 4.00 0.00 17.42 19.65 0 0.000 0 0.000 0.000

0.00 0.00 4.00 0.00 17.42 19.65 0 0.000 0 0.000 0.000

0.00 0.00 4.00 0.00 17.42 19.65 0 0.000 0 0.000 0.000

4.查看當(dāng)前運(yùn)行棧信息

正常情況,執(zhí)行如下命令結(jié)果也是一樣,可以正常輸出

jstack 3003 =》 java -cp tools.jar sun.tools.jstack.JStack 3003

但是有的jre安裝不正常的時(shí)候,會(huì)報(bào)如下錯(cuò)誤

Exception in thread "main" java.lang.UnsatisfiedLinkError: no attach in java.library.path

這是因?yàn)閖stack的運(yùn)行需要attach本地庫(kù)的支持,我們需要在系統(tǒng)變量里面配置上其路徑,假如路徑為/home/JDK/jre/bin/libattach.so

命令轉(zhuǎn)換成

jstack 3003 =》 java -Djava.library.path=/home/JDK/jre/bin -cp tools.jar sun.tools.jstack.JStack 3003

就可以實(shí)現(xiàn)了

在linux系統(tǒng)中是libattach.so,而在windows系統(tǒng)中是attach.dll,它提供了一個(gè)與本機(jī)jvm通信的能力,利用它可以與本地的jvm進(jìn)行通信,許多java小工具就可能通過(guò)它來(lái)獲取jvm運(yùn)行時(shí)狀態(tài),也可以對(duì)jvm執(zhí)行一些操作。

jstack命令詳解

jstack用于打印出給定的java進(jìn)程ID或core file或遠(yuǎn)程調(diào)試服務(wù)的Java堆棧信息,如果是在64位機(jī)器上,需要指定選項(xiàng)"-J-d64",

Windows的jstack使用方式只支持以下的這種方式:jstack [-l] pid

如果java程序崩潰生成core文件,jstack工具可以用來(lái)獲得core文件的java stack和native stack的信息,從而可以輕松地知道java程序是如何崩潰和在程序何處發(fā)生問(wèn)題。另外,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是非常有用的。

需要注意的問(wèn)題:

l 不同的 JAVA虛機(jī)的線程 DUMP的創(chuàng)建方法和文件格式是不一樣的,不同的 JVM版本, dump信息也有差別。

l 在實(shí)際運(yùn)行中,往往一次 dump的信息,還不足以確認(rèn)問(wèn)題。建議產(chǎn)生三次 dump信息,如果每次 dump都指向同一個(gè)問(wèn)題,我們才確定問(wèn)題的典型性。

2、命令格式

$jstack [ option ] pid

$jstack [ option ] executable core

$jstack [ option ] [server-id@]remote-hostname-or-IP

參數(shù)說(shuō)明:

pid: java應(yīng)用程序的進(jìn)程號(hào),一般可以通過(guò)jps來(lái)獲得;

executable:產(chǎn)生core dump的java可執(zhí)行程序;

core:打印出的core文件;

remote-hostname-or-ip:遠(yuǎn)程debug服務(wù)器的名稱或IP;

server-id: 唯一id,假如一臺(tái)主機(jī)上多個(gè)遠(yuǎn)程debug服務(wù);

--

知識(shí)分享,時(shí)代前行!~~ 時(shí)代Java還有更多好文章……請(qǐng)查看歷史文章和官網(wǎng),有分享,有收獲!

總結(jié)

以上是生活随笔為你收集整理的java自带工具_深入了解Java JDK自带工具,包括javac、jar、jstack等,实用~的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。