JVM核心线程

10
在我的计算机上启动JVM实例,并在main()中运行无限休眠的简单类时,除了主线程外,我可以看到JVM中的四个关键线程:
  1. Attach Listener
  2. Reference Handler
  3. Finalizer
  4. Signal Dispatcher
  5. DestroyJavaVM
我很好奇这些核心JVM线程的目的。通过快速的互联网搜索,我找到了以下关于这些线程的详细信息:
  1. 附加侦听器: 动态附加由目标JVM中的附加侦听器线程处理。当第一个附加请求发生时,会启动此线程。
  2. 信号分派器: 当操作系统向JVM发出信号时,信号分派器线程将把信号传递给相应的处理程序。
  3. 引用处理器: 高优先级线程以排队等待挂起的引用。GC创建了一个简单的引用链接列表需要进行处理,该线程会快速将它们添加到正确的队列并通知ReferenceQueue监听器。
  4. 终结者: 终结器线程调用终结器方法。
  5. DestroyJavaVM: 在程序退出时,此线程卸载Java VM。大多数情况下,它应该处于等待状态。
我想进一步了解这些线程的详细信息(或者了解是否存在理解上的更正),以及参考文献(如果有的话)。
1个回答

4
你的理解基本上是正确的,我想补充一点关于attach listener线程(负责动态连接)的说明。这不是通常使用的东西,但实际上允许另一个进程向正在运行的JVM中注入线程,以查询有关VM运行方式的某些细节。只在两个Java VM之间实际使用(就我所见),例如在调试或分析时(或者在某些IDE中,当用户代码运行时显示其他信息时)。请注意,所有这些线程都严重依赖于实现,并且不一定适用于其他VM(甚至不同版本的同一VM或具有不同选项的相同VM)。 JVM可能会在启动时启动尽多或少的核心线程,这些线程的数量和类型(除了主线程之外)不在用户控制范围内。

“attach listener” 是否也在某个特定的端口上进行监听?如果是,那么它监听的是哪一个端口? - sactiw

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