Java 不同的(热点)JVM线程类型做什么?
我看到热点JVM中实现了六种线程类型:VMThread、CGCThread、PGCThread、JavaThread、CompilerThread和WatcherThread。然而,我不知道哪种线程类型在做什么。以下是我迄今为止的理解:Java 不同的(热点)JVM线程类型做什么?,java,multithreading,jvm,Java,Multithreading,Jvm,我看到热点JVM中实现了六种线程类型:VMThread、CGCThread、PGCThread、JavaThread、CompilerThread和WatcherThread。然而,我不知道哪种线程类型在做什么。以下是我迄今为止的理解: VMThread:运行VM任务,如垃圾收集器 CGCThread:并发垃圾收集器 PGCThread:并行垃圾收集器(与CGC的区别?) JavaThread:我想是程序的线程 编译器线程:编译器的线程 WatcherThread: 附加问题:其他JVM呢?
- VMThread:运行VM任务,如垃圾收集器
- CGCThread:并发垃圾收集器
- PGCThread:并行垃圾收集器(与CGC的区别?)
- JavaThread:我想是程序的线程
- 编译器线程:编译器的线程李>
- WatcherThread:
附加问题:其他JVM呢?好的,感谢评论,我们有了一个答案的开头: 1) 由于垃圾收集器有一个“停止世界”机制,因此除了调整之外,还有两种方法可以减少这些暂停:
- 通过PGCThreads运行并行GCs,如果有n个内核可用,那么可以在暂停期间运行n个线程以缩短它们
- 对于并发GC,通过CGCThread运行并完成常规GC关闭暂停的作业,与主程序线程并发
3) WatcherThread每50毫秒模拟一次计时器中断,以在VM中运行周期性操作。您可以在以下页面上找到简要说明: VM线程的主要类型如下:
- VM线程:VMThread的这个单例实例负责执行VM操作,下面将讨论这些操作
- 周期性任务线程:WatcherThread的这个单例实例模拟计时器中断,以便在内部执行周期性操作 虚拟机
- GC线程:这些不同类型的线程支持并行和并发垃圾收集
- 编译器线程:这些线程执行字节码到本机代码的运行时编译
- 信号分派器线程:该线程等待进程定向的信号,并将其分派到Java级别的信号处理方法
您可能需要阅读整个线程管理段落,因为它继续进行进一步的解释,例如VM线程负责什么。我要补充的是,有7个线程输入!不要错过操作系统线程 路径:定义在:
/hotspot/src/share/vm/runtime/os.hpp
enum ThreadType {
vm_thread,
cgc_thread, // Concurrent GC thread
pgc_thread, // Parallel GC thread
java_thread, // Java, CodeCacheSweeper, JVMTIAgent and Service threads.
compiler_thread,
watcher_thread,
os_thread
};
并行与并发:热点中的PCG与CGC:CompilerThread用于JIT编译器。有关WatcherThread的一些信息如下: