您的位置:首页 > 编程语言 > Java开发

启动Java程序时JVM中的线程

2012-05-21 09:02 447 查看
今天用 Eclipse Memory Analyzer 分析一个Heap OutOfMemoryError,意外发现 除了 main线程外,还有其他四个线程,如图




(1) main

无需赘述,程序主线程,Eclipse Debug时也会看到

(2) Signal Dispatcher

处理操作系统底层信号

参考:http://www.ibm.com/developerworks/java/library/i-signalhandling/

(3) Attach Listener

JVM中提供了一个供外界访问JVM内部情况的接口,在第一次访问的时候创建这个现成。

Eclipse需要用到,实际上,可能,大概,Eclipse就是以此为基础的

不知道如果不通过Eclipse运行此程序,Attach Listener还会不会创建

参考:http://openjdk.java.net/groups/hotspot/docs/Serviceability.html#battach

(4) Reference Handler

java.lang.ref.Reference 中启动,demaon线程,不停检查reference的pending-List是否有值,如果有,把list里的reference enqueue

(5) Finalizer

java.lang.ref.Finalizer 中启动,demaon线程,不停检查ReferenceQueue中是否有值,如果有,finalize之

======================================================================================

不过,通过 任务管理器和pslist却发现进程中有10个线程:





不知其他5个是什么。。。

=======================2012-06-02=======================

通过jvisualvm可清晰地看出这十个线程是什么。

测试程序:

// user jvisualvm
public class JVMThreadsCount {
public static void main(String[] args) throws InterruptedException {
while (true) {
Thread.sleep(1000);
}
}
}


通过jvisualvm的线程观察如下:



可以看出,除了上文所述之5个线程,另外5个线程分属于JMX与RMI
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: