java - JVM 核心线程

标签 java multithreading jvm

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

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

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

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

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

最佳答案

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

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

关于java - JVM 核心线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19427339/

相关文章:

python - Django 数据库和线程

C# 服务器线程分配

java - 在 domain.xml 中添加 SSL keystore 密码作为别名

java - 减少对象列表中的整数属性

java - 使用方法删除重复项

multithreading - Cocos,如何从后台线程渲染到CCRenderTexture

java - 在 Java 中调用的 Flex 编译器 mxmlc 导致 64 位 JVM 崩溃 (dcpr.dll)

java - 让另一个 JVM 成为比 Sun JVM 更好的选择的 killer 设施或场景?

java - 在其他java文件中声明多个字符串

java - 将 firebase 添加到使用 gradle 构建的 libgdx 项目