<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
java jstack是什麼,讓我們一起了解一下?
jstack是java虛擬機自帶的一種堆棧跟蹤工具,用於打印出給定的java進程ID或core file或遠程調試服務的Java堆棧資訊,主要分爲兩個功能:針對活着的進程做本地的或遠程的線程dump,以及針對core檔案做線程dump。
jstack的概念是什麼?
1、jstack命令的語法格式:jstack
2、Dump檔案:Dump檔案是進程的內存鏡像。可以把程序的執行狀態透過調試器儲存到dump檔案中。Dump檔案是用來給驅動程序編寫人員調試驅動程序用的,這種檔案必須用專門的工具軟件開啟,比如使用Windbg。
在Windbg中可以透過.dump命令儲存進程的dump檔案。比如下面的命令把當前進程的鏡像儲存爲c:estdump.dmp檔案:.dump /ma c:estdump.dmp。
其中、ma參數表示dump檔案應該包含進程的完整資訊,包括整個用戶態的內存,這樣dump檔案尺寸會比較大,資訊非常全面。如果不是用、ma參數,儲存下來的dump檔案只包含了部分重要資料,比如寄存器和線程棧空間,檔案尺寸會比較小,無法分析所有的數據。
3、java線程Dump:線程dump是非常有用的診斷java應用問題的工具,每一個java虛擬機都有及時生成顯示所有線程在某一點狀態的線程dump的能力。雖然各個java虛擬機線程dump打印輸出格式上略微有一些不同,但是線程dump出來的資訊包含線程基本資訊;線程的執行狀態、標識和調用的堆棧;調用的堆棧包含完整的類名,所執行的方法,如果可能的話還有原始碼的行數。
jstack是如何使用的?
實戰案例如下:
package concurrency;import java.io.IOException;import java.io.InputStream;public class Test { public static void main(String[] args) throws InterruptedException, IOException { InputStream is = System.in; int i = is.read(); System.out.println("exit。"); }}