15

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

  • VMThread:像垃圾收集器一样运行 VM 任务。
  • CGCThread:并发垃圾收集器。
  • PGCThread:并行垃圾收集器(与 CGC 的区别?)。
  • JavaThread:我猜是程序的线程。
  • CompilerThread:编译器的线程?
  • 观察者线程:?

附加问题:其他 JVM 呢?

4

3 回答 3

5

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

VM线程的主要种类如下:

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

您可能想阅读整个线程管理段落,因为它继续进一步解释,例如 VM 线程负责什么。

于 2014-08-14T16:27:42.747 回答
3

好的,感谢评论,我们有了答案的开始:

1)由于垃圾收集器有一个停止世界的机制,除了调整之外,还有两种方法可以减少这些暂停:

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

2) CompilerThread 运行即时编译器。

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

于 2013-03-07T15:47:12.233 回答
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
  };
于 2017-10-24T17:04:53.320 回答