mutator线程的概念与垃圾收集有关。
Hotspot中的基本线程模型是Java线程(java.lang.Thread的一个实例)和本机操作系统线程之间的1:1映射。
What do the different (HotSpot) JVM thread types do?
在hotspot/src/share/vm/runtime/thread.hpp
// Class hierarchy
// - Thread
// - NamedThread
// - VMThread
// - ConcurrentGCThread
// - WorkerThread
// - GangWorker
// - GCTaskThread
// - JavaThread
// - various subclasses eg CompilerThread, ServiceThread
// - WatcherThread
JavaThread
是最接近mutator线程的人。但是,JavaThread
有一些儿童班:
CodeCacheSweeperThread
,CompilerThread
,//通常我在JVM中看到C1,C2编译器jmitiAgentThread
,ServiceThread
。我不认为CodeCacheSweeperThread,CompilerThread,jmitiAgentThread是mutator线程......但ServiceThread怎么样?
此外,我认为CompilerThread
应该是JVM的内部线程,但不是mutator线程。
如何区分作为Java程序的mutator线程,说哪个线程服务于以下单线程程序(1:1映射)?
public class HelloWorld {
public static void main(String[] args) {
// Prints "Hello, World" to the terminal window.
System.out.println("Hello, World");
}
}
mutator线程的概念与垃圾收集有关。
AFAIK,它不是通常与Java相关的术语,因为假定每个线程都能够修改堆。有一些例外,例如编译器线程只修改本机代码转换。
一般来说,我会假设任何线程都可以修改状态,除非你有特殊的理由相信。
它与JVM internal threads更精确地与GC有关。