不同的(HotSpot)JVM线程类型有什么作用?

我看到HotSpot JVM中实现了六种线程类型:VMThread,CGCThread,PGCThread,JavaThread,CompilerThread和WatcherThread。 但是我不知道哪种线程类型正在做什么。 这是我到目前为止所理解的:

  • VMThread:运行垃圾收集器之类的VM任务。
  • CGCThread:并发垃圾收集器。
  • PGCThread:并行垃圾收集器(与CGC的差异?)。
  • JavaThread:程序的线程,我想。
  • CompilerThread:编译器的一个线程?
  • WatcherThread:?

其他问题:其他JVM呢?

您可以在OpenJDK网站上找到简要说明:

VM线程的主要类型如下:

  • VM线程:VMThread的这个单例实例负责执行VM操作,这将在下面讨论
  • 周期性任务线程:WatcherThread的这个单例实例模拟用于在VM内执行定期操作的计时器中断
  • GC线程:这些不同类型的线程支持并行和并发垃圾回收
  • 编译器线程:这些线程执行字节码到本机代码的运行时编译
  • 信号调度程序线程:该线程等待进程定向信号并将它们分派给Java级信号处理方法

您可能希望阅读整个“线程管理”段落,因为它会继续进一步解释,例如VM线程负责的内容。

好的,感谢评论,我们得到了答案的开头:

1)由于垃圾收集器具有世界末日的机制,除了调整之外还存在两种减少这些暂停的方法:

  • 对于通过PGCThreads运行的并行GC,如果有n个核可用,则可以在暂停期间运行n个线程以缩短它们。
  • 使用并发GC,通过CGCThread运行并完成常规GC关闭暂停的工作,与主程序线程同时进行。

2)CompilerThread运行Just-In-Time编译器。

3)WatcherThread每隔50ms模拟定时器中断,以在VM中运行定期操作。

我想补充说JVM中有7个线程类型! 不要错过os_thread

path:定义于: /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 };