JVM核心线程

dro*_*ean 8 java multithreading jvm

在我的机器上启动JVM实例时,有一个运行无限睡眠的简单类main(),我在JVM中看到了四个关键线程(除了主线程):

  1. 附加监听器
  2. 参考处理程序
  3. 终结
  4. 信号调度员
  5. DestroyJavaVM

我很想知道每个核心JVM线程的用途.通过快速的互联网搜索,我在这些主题上找到了以下详细信息:

  1. 附加侦听器:动态附加在目标JVM中具有附加侦听器线程.这是在第一个附加请求发生时启动的线程.
  2. 信号调度程序:当操作系统向JVM发出信号时,信号调度程序线程会将信号传递给适当的处理程序.
  3. 引用处理程序:用于将待处理引用排入队列的高优先级线程.GC创建一个简单的链接引用列表,需要进行处理,并且该线程会快速将它们添加到正确的队列中,并通知ReferenceQueue侦听器.
  4. Finalizer:Finalizer线程调用终结器方法.
  5. DestroyJavaVM:该线程在程序退出时卸载Java VM.大多数时候它应该等待.

我想了解这些线程和参考文档(如果已知)的更多细节(或理解上的更正).

Mic*_*rry 4

您几乎说得对,我要添加的唯一进一步说明是附加侦听器线程(负责动态附加)。这不是通常使用的东西,但本质上允许另一个进程注入线程在正在运行的 JVM 内部查询有关 VM 运行情况的某些详细信息。它仅在实践中(据我所知)在两个 Java VM 之间使用,例如在调试或分析时(或者在某些 IDE 的情况下,在运行时显示有关用户代码的一些其他信息)。

请注意,所有这些线程都严重依赖于实现,并且不一定依赖于其他 VM(甚至同一 VM 的不同版本,或者具有不同选项的同一 VM)。JVM 可能会启动与启动的核心线程一样多或一样少的核心线程。它喜欢在启动时,它们的数量和类型(除了主线程)不受用户控制。