2016-02-12 82 views
1

如何避免jvm運行jvm容器中的編譯器線程。如何避免jvm容器中運行編譯器線程

"C1 CompilerThread1" #6 daemon prio=9 os_prio=0 tid=0x00007fb2980cc000 nid=0x440e waiting on condition [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

"C2 CompilerThread0" #5 daemon prio=9 os_prio=0 tid=0x00007fb2980be800 nid=0x440d waiting on condition [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 
+0

爲什麼你想避免他們? –

回答

2

那些線程來自熱點編譯器。如果您想在線程轉儲中刪除它們,請以java -Xint ...開始您的應用程序。

被警告後可能會緩慢運行。 ;-)

編輯要說清楚。禁用JIT編譯器不是你想要做的事情。然後字節碼在interpreted模式下執行,而不是compiled code for your plattform。看到java options

小片段演示

public class Jit { 
    public static void main(String[] args) { 
     long start = System.currentTimeMillis(); 
     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < 10_000_000; i++) { 
      sb.append(' '); 
     } 
     long end = System.currentTimeMillis(); 
     System.out.println("length = " + sb.length()); 
     System.out.println("duration: " + (end - start)); 
    } 
} 

在混合模式下運行(編譯點播)

java Jit 
length = 10000000 
duration: 124 

運行在解釋模式下

java -Xint Jit 
length = 10000000 
duration: 3495 
+1

可能嗎?將!一個數量級! –

+0

@StephenC我知道。因此,笑臉。 – SubOptimal

+0

我知道你知道。但是OP可能不會「得到」你的幽默感。 –