gpt4 book ai didi

java - java中的C2 CompilerThread

转载 作者:搜寻专家 更新时间:2023-11-01 04:04:07 26 4
gpt4 key购买 nike

我在 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 是一个字节码编译器。我有三个问题:

  1. 为什么有 2 个编译器线程?可以多一些还是少一些?如果是这样,什么时候?编译是否并行运行?
  2. nid 参数是什么意思?第一个nid=0x7d72和java版的很像,是不是巧合?
  3. 为什么条件地址绝对为零?

最佳答案

  1. 编译器线程的数量是根据 JVM 人体工程学自动确定的。它可能因可用 CPU 的数量而异。具体公式可见here .可以使用 -XX:CICompilerCount=N JVM 选项手动覆盖编译器线程数。
  2. nid (Native ID) 是 OS 给的线程的唯一 ID。在 Linux 上,它是 gettid() 返回的数字.在您的情况下,TID = 0x7d72 = 32114。
  3. [0x0000000000000000] 这里与waiting on condition无关。括号中打印的是与页面大小对齐的最后一个已知 Java 堆栈帧的堆栈指针。由于编译器线程不是真正的 Java 线程,它没有最后一个 Java SP,因此打印为零。

关于java - java中的C2 CompilerThread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34516149/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com