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

15
我看到在HotSpot JVM中实现了六种线程类型:VMThread、CGCThread、PGCThread、JavaThread、CompilerThread和WatcherThread。但是我不知道每种线程类型究竟在做什么。目前我所了解的是:

  • VMThread:运行VM任务,例如垃圾回收器。
  • CGCThread:并发垃圾收集器。
  • PGCThread:并行垃圾收集器(与CGC有何区别?)。
  • JavaThread:程序的线程,我猜测。
  • CompilerThread:编译器的线程?
  • WatcherThread:?

附加问题:其他JVM呢?


2
并行 vs 并发:https://dev59.com/gXI-5IYBdhLWcg3wW2-p - m0skit0
1
PCG与CGC在Hotspot中的比较:http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html#available_collectors - assylias
2
编译器线程是为JIT编译器而设计的。 - Chochos
1
这里有关于WatcherThread的一些信息:https://blogs.oracle.com/ksrini/entry/we_take_java_performance_very - assylias
3个回答

5
您可以在OpenJDK网站上找到有关以下主要VM线程的简要说明:

主要VM线程的种类如下:

  • VM线程:这个VMThread的单例实例负责执行VM操作,下面将讨论这些操作
  • 周期任务线程:这个WatcherThread的单例实例模拟定时器中断,用于执行VM内的周期性操作
  • GC线程:这些线程有不同的类型,支持并行和并发垃圾回收
  • 编译器线程:这些线程执行字节码到本地代码的运行时编译
  • 信号分发线程:此线程等待进程指向的信号,并将它们分派给Java级别的信号处理方法
您可能想阅读整个“线程管理”段落,因为它还包括更多的解释,例如VM线程的职责是什么。

3

好的,感谢评论区的答案,我们得到了一个部分回答:

1)由于垃圾收集器具有停止-全球机制,除了调整参数外,还有两种方法可以减少这些暂停:

  • 使用并行GC通过PGCThreads运行,如果有n个核心可用,则在暂停期间可以运行n个线程以缩短暂停时间。
  • 使用并发GC通过CGCThread运行,与主程序线程并发地完成常规GC的工作以消除暂停。

2)CompilerThread运行即时编译器。

3)WatcherThread模拟定时器中断,每50毫秒在VM中运行周期性操作。


1

我想补充一下,JVM 中有7种线程类型!不要错过os_thread

路径:定义在:/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
  };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接