java c2 compiler_C2中的CompilerThread
我在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是一個字節碼編譯器.我有三個問題:
>為什么有2個編譯器線程?可以或多或少嗎?如果是的話,何時?編譯是否并行運行?
> nid參數是什么意思?第一個nid = 0x7d72看起來類似于java版本,是巧合還是不巧合?
>為什么條件地址是絕對零?
解決方法:
>根據JVM人機工程學自動確定編譯器線程的數量.它可能會根據可用CPU的數量而有所不同.確切的公式可以找到here.可以使用-XX:CICompilerCount = N JVM選項手動覆蓋編譯器線程的數量.
> nid(Native ID)是OS給出的線程的唯一ID.在Linux上,它是gettid()返回的數字.在您的情況下,TID = 0x7d72 = 32114.
> [0x0000000000000000]這里與等待條件無關.括號中打印的是與頁面大小對齊的最后一個已知Java堆棧幀的堆棧指針.由于編譯器線程不是真正的Java線程,因此它沒有最后的Java SP,因此打印為零.
標簽:java,jvm,jit
來源: https://codeday.me/bug/20190713/1453523.html
總結
以上是生活随笔為你收集整理的java c2 compiler_C2中的CompilerThread的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python算法习题(十):木材加工
- 下一篇: 十进制转化为二进制