【问题标题】:JVM Core ThreadsJVM 核心线程
【发布时间】:2013-10-17 12:55:18
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java multithreading jvm


    【解决方案1】:

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

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

    【讨论】:

    • 那么“附加侦听器”是否也在侦听某个特定端口?如果是,那是哪一个?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多