10

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

  1. 附加监听器
  2. 引用处理程序
  3. 终结器
  4. 信号调度器
  5. 销毁JavaVM

我很想了解每个核心 JVM 线程的用途。通过快速的互联网搜索,我发现了这些线程的以下详细信息:

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

我想了解有关这些线程和参考文档(如果已知)的更多详细信息(或理解上的更正)。

4

1 回答 1

4

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

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

于 2013-10-17T13:03:56.957 回答