JVM核心线程

时间:2013-10-17 12:55:18

标签: java multithreading jvm

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

  1. 附加监听器
  2. 参考处理程序
  3. 终结
  4. 信号调度员
  5. DestroyJavaVM
  6. 我很想知道每个核心JVM线程的用途。通过快速的互联网搜索,我在这些主题中找到了以下详细信息:

    1. 附加侦听器:动态附加具有附加侦听器线程 目标JVM。这是第一个启动的线程 发生附加请求。
    2. 信号调度程序:当操作系统向JVM发出信号时, 信号调度程序线程将信号传递给相应的 处理程序。
    3. 参考处理程序:将待处理的高优先级线程排入队列 引用。 GC创建一个简单的链接引用列表 需要处理,这个线程快速添加到适当的 排队并通知ReferenceQueue侦听器。
    4. Finalizer :Finalizer线程调用终结器方法。
    5. DestroyJavaVM :此线程在程序退出时卸载Java VM。大部分时间都应该等待。
    6. 我想了解这些主题和参考文档(如果已知)的更多细节(或理解上的更正)。

1 个答案:

答案 0 :(得分:3)

你几乎已经做对了,我要添加的唯一进一步的澄清是使用attach侦听器线程(它负责动态连接。)这不是通常使用的东西,但实际上允许另一个进程在正在运行的JVM中注入一个线程,以查询有关VM如何运行的某些详细信息。它仅在两个Java VM之间实际使用(据我所见),例如在调试或分析时(或者某些IDE在运行时显示有关用户代码的其他信息)。

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