垃圾收集器是一个后台线程(daemon thread)吗?
谢谢。
垃圾收集器是一个后台线程(daemon thread)吗?
谢谢。
我认为垃圾回收线程是一个守护线程。守护线程是低优先级的线程,间断地在后台运行执行垃圾回收操作或其他Java运行时系统的请求。
至少从 java.lang.Thread
的角度来看,这不是一个线程。
java.lang.Thread
类的实例。因此,我间接地暗示它是一个从用户层面抽象出来的本地实现。 - adarshr是的:http://www.javaperspective.com/daemon-threads.html: 守护线程被认为是在后台运行的线程,通常用作用户线程的服务提供者。例如,Java垃圾收集器就是一个守护线程。
在JDK 1.8中,以下线程列出如下:
ThreadMXBean mxbean = ManagementFactory.getThreadMXBean();
for(long id:mxbean.getAllThreadIds())
System.out.println(mxbean.getThreadInfo(id));
输出 -
没有GC线程。可以安全地说垃圾回收过程是本地的。
守护线程是一种即使在JVM退出后仍然继续运行的线程。引自Oracle文档。 当Java虚拟机启动时,通常有一个单个非守护线程(通常调用某个指定类的main方法)。Java虚拟机会继续执行线程,直到发生以下情况之一: •Runtime类的exit方法已被调用,并且安全管理器已允许执行退出操作。 •所有非守护线程都已死亡,或者通过从run方法返回或抛出超出run方法的异常来结束。
因此,如果GC是守护线程,则它应该是由Java运行时生成的本机线程,但可以在JVM退出后继续运行。