根据执行任务的不同,JVM中的线程可以分为两大类:一类是执行Java任务的,称为JavaThread;另一类是执行JVM自身任务的,称为NonJavaThread。
JVM里面定义了Thread、JavaThread、NonJavaThread、NamedThread等线程基类来描述线程信息,详细说明如表3-9所示。
表3-9 JVM线程基类
(续)
VMThread是JVM自身的一个线程,它主要用来协调其他线程到达安全点(Safe Point)进行垃圾回收的。
WatcherThread是周期性任务的调度器,用来触发周期性任务的执行,JVM里面有很多周期性任务用来进行内存管理、数据清理、错误信息收集等。
垃圾回收主要有两个线程:ConcurrentGCThread,负责垃圾收集器的调度;WorkerThread,负责垃圾回收算法执行,详细说明如表3-10所示。
表3-10 JVM垃圾回收线程
代码编译主要有两个线程:CompilerThread负责代码编译与优化,ServiceThread负责编译过程中产生的垃圾数据清理,详细说明如表3-11所示。
表3-11 JVM编译线程
JVM在运行过程中还会接受外部的命令,例如在开发过程中的调试命令,所以JVM设计了JvmtiAgentThread线程来接收并处理外部命令,详细说明如表3-12所示。
表3-12 JVMTI线程