我有一个非常简单的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个线程有什么用呢?
And is anyone of them related to Garabage collection in any manner ?
笔记:
的输出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
-
Reference Handler http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/8b04ee324a1a/src/share/classes/java/lang/ref/Reference.java#l120线程负责将垃圾收集器发现的弱引用、软引用和幻像引用添加到其注册中参考队列 http://docs.oracle.com/javase/8/docs/api/java/lang/ref/ReferenceQueue.html.
-
Finalizer http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/8b04ee324a1a/src/share/classes/java/lang/ref/Finalizer.java#l186线程运行
finalize
准备完成的对象的方法。
-
Signal Dispatcher http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/812ed44725b8/src/share/vm/runtime/os.cpp#l241等待特定操作系统信号并处理它们。特别是,它使线程转储
SIGQUIT
,并且还启动 VM 关闭过程SIGTERM
, SIGINT
, SIGHUP
.
-
Attach Listener http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/812ed44725b8/src/share/vm/services/attachListener.cpp#l407螺纹支撑动态附加 https://docs.oracle.com/javase/8/docs/jdk/api/attach/spec/机制。它侦听传入的动态连接连接并执行 VM 命令。例如,它被使用
jstack
, jmap
and jcmd
公用事业。
-
RMI TCP Accept
线程显然接受新的 RMI 连接。
-
RMI TCP Connection
线程为已建立的 RMI 连接提供服务。
-
RMI Scheduler
运行 RMI 后台任务,例如DGC https://docs.oracle.com/javase/8/docs/api/java/rmi/dgc/DGC.html.
-
JMX server connection timeout
线程在需要时终止 JMX 连接。
Reference Handler
, Finalizer
和部分RMI Scheduler
与GC有关。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)