垃圾收集器是守护程序线程吗?

时间:2011-03-07 11:01:02

标签: java multithreading garbage-collection

垃圾收集器是一个守护进程(后台)线程吗?

感谢。

5 个答案:

答案 0 :(得分:6)

我将假设是,垃圾收集器线程是一个守护程序线程。守护程序线程是一个低优先级的线程,它在后台间歇运行,执行垃圾收集操作或对java运行时系统的其他请求。

答案 1 :(得分:2)

至少从java.lang.Thread角度来看,这不是一个主题。

答案 2 :(得分:0)

是:http://www.javaperspective.com/daemon-threads.html: (守护程序线程被视为在后台运行的线程,它们通常用作用户线程的服务提供者。例如,Java垃圾收集器是守护程序线程)

答案 3 :(得分:0)

在jdk 1.8上,以下线程用

列出
ThreadMXBean mxbean = ManagementFactory.getThreadMXBean();
    for(long id:mxbean.getAllThreadIds())
        System.out.println(mxbean.getThreadInfo(id));

输出-

  1. “附加侦听器” Id = 5可运行
  2. “信号调度器” Id = 4可运行
  3. “最终确定者” Id = 3在java.lang.ref.ReferenceQueue$Lock@63947c6b上等待
  4. “引用处理程序” Id = 2在java.lang.ref.Reference$Lock@2b193f2d上等待
  5. “主” ID = 1可运行

没有GC线程。可以肯定地说垃圾收集过程是本地的。

答案 4 :(得分:-1)

守护程序线程也是一个即使在JVM退出后仍继续运行的线程。来自Oracle文档 当Java虚拟机启动时,通常会有一个非守护程序线程(通常调用某个指定类的名为main的方法)。 Java虚拟机继续执行线程,直到发生以下任一情况: •已调用类Runtime的exit方法,并且安全管理器已允许执行退出操作。 •所有非守护程序线程的线程都已死亡,方法是从调用run方法返回,或者抛出一个超出run方法传播的异常。

因此,如果GC是守护程序线程,它应该是由java运行时生成的本机线程,但可以在JVM退出后继续运行