[英]C2 CompilerThread in java
我在java進程(oracle jdk1.7_072)上運行jstack並找到了這些行
"C2 CompilerThread1" daemon prio=10 tid=0x00007f1a8415d000 nid=0x7d72 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread0" daemon prio=10 tid=0x00007f1a8415a000 nid=0x7d71 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
我知道C2是一個字節碼編譯器。 我有三個問題:
nid
參數是什么意思? 第一個nid=0x7d72
看起來類似於java版本,是巧合還是不巧合? -XX:CICompilerCount=N
手動覆蓋編譯器線程的數量-XX:CICompilerCount=N
JVM選項。 nid
(Native ID)是OS給出的線程的唯一ID。 在Linux上,它是gettid()返回的數字 。 在你的情況下TID = 0x7d72 = 32114。 [0x0000000000000000]
這里與waiting on condition
無關。 括號中打印的是與頁面大小對齊的最后一個已知Java堆棧幀的堆棧指針。 由於編譯器線程不是真正的Java線程,因此它沒有最后的Java SP,因此打印為零。 由於我還沒有足夠的聲譽來評論,我寫這個作為答案,雖然我不打算重新回答已經說得好的和完全的。
只是想澄清一下堆棧跟蹤中的“nid”是在“ps”或“top”輸出中看到的進程ID,除了它以十六進制格式給出。 對於將高CPU使用的進程與罪魁禍首Java線程及其堆棧聯系起來非常有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.