在简单的Java代码中创建的这些JVM守护程序线程是什么?

时间:2016-11-11 16:31:44

标签: java jvm

我有这么简单的java应用程序,它只是创建一个对象,在无限循环内调用所有这些函数

public class h { 
    public static void main( String[] args) {
        while(true) {
            B b = new B();
            b.print();
        }
    }
}

class B { 
    public void print() {
        System.out.println("Hello I'am class B");
    }
}

打开jvisualvm我看到JVM创建了10个线程,只有一个是主线程和9个守护进程。

这9个帖子的用途是什么?

他们中的任何人都以任何方式与Garabage收藏有关吗? enter image description here

注意: 输出java -version

java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)

操作系统:Arch Linux 4.8.6-1

3 个答案:

答案 0 :(得分:4)

  • Reference Handler线程负责将垃圾收集器发现的Weak,Soft和Phantom引用添加到其注册的ReferenceQueues中。
  • Finalizer线程运行finalize对象的方法准备完成。
  • Signal Dispatcher等待特定的OS信号并处理它们。特别是,它在SIGQUIT上进行线程转储,并在SIGTERMSIGINTSIGHUP上启动VM关闭过程。
  • Attach Listener线程支持Dynamic Attach机制。它侦听传入的动态连接连接并执行VM命令。例如,它由jstackjmapjcmd实用程序使用。
  • RMI TCP Accept线程显然接受新的RMI连接。
  • RMI TCP Connection个线程服务于已建立的RMI连接。
  • RMI Scheduler运行RMI后台任务,例如DGC
  • JMX server connection timeout线程在需要时终止JMX连接。

Reference HandlerFinalizer和部分RMI Scheduler与GC相关。

答案 1 :(得分:1)

Reference Handler用于处理Reference s(SoftReferenceWeakReferencePhantomReference及其子类),Finalizer个线程调用可终结对象的finalize()方法。

JMXRMI线程允许您观察正在运行的JVM。

我不知道其他两个主题是做什么的。

答案 2 :(得分:0)

我只认识到底部5个线程是java应用程序的默认线程。虽然每个JVM可以使用不同的线程来执行各种任务。如果一个Thread设置为deamon,则意味着JVM将关闭,尽管deamon-thread仍在运行。主要'线程是一个非deamon线程意味着,只要'主要'线程完成后,JVM将关闭。

关于他们的任务,基本上他们的名字告诉他们做了什么。 ' finallizer'线程是负责垃圾收集的(主要是)。 '附加听众','信号调度员'以及' ReferenceHandler'是执行其他后台任务的线程。