2013-10-17 41 views
7

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

  1. 连接监听器
  2. 参考处理程序
  3. 终结
  4. 信号分派器
  5. DestroyJavaVM

我很想知道每个核心JVM线程的目的。从快速的互联网搜索,我发现这些线程以下细节:

  1. 附加监听:动态连接在 目标JVM的连接监听线程。这是在发生第一个附加请求时启动的线程。
  2. 信号调度程序:当OS向JVM发出信号时,信号调度程序线程会将信号传递给合适的 处理程序。
  3. 参考处理程序:高优先级线程排队挂起 参考。 GC创建一个简单的参考链接列表,其中需要处理 ,并且该线程将其快速添加到正确的 队列中,并通知ReferenceQueue侦听器。
  4. 终结者:终结器线程调用终结器方法。
  5. DestroyJavaVM:此线程在程序退出时卸载Java VM。大部分时间应该等待。

我想知道关于这些线程和参考文档(如果知道)的更多细节(或理解的更正)。

回答

3

你已经非常明白了,我会添加的唯一进一步说明是附加监听器线程(负责动态连接)。这不是通常使用的,但实质上允许另一个进程在正在运行的JVM中注入线程以查询有关VM如何运行的某些详细信息。它只在两个Java虚拟机之间的实践中使用(例如调试或分析时)(或者某些IDE在运行时显示有关用户代码的其他信息)。

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

+0

那么“attach listner”是否也在某个特定的端口中侦听?如果是,那么它是哪一个? – sactiw