如何避免 jvm 在 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

这些线程来自热点编译器。如果要在线程转储中删除它们,请以 java -Xint ... 启动应用程序。

请注意,之后它可能会运行缓慢。

编辑 说清楚。禁用 JIT 编译器不是您想要执行的操作。然后,字节码以interpreted模式而不是compiled code for your plattform执行。查看 Java 选项

用于演示的小片段

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

最新更新