启动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
相关文章推荐
- Java程序的运行原理及JVM的启动是多线程的吗?
- 多线程_Java程序运行原理和JVM的启动是多线程的吗
- 迅雷笔试题 (JAVA多线程)启动三个线程,分别打印A B C,现在写一个程序 循环打印ABCABCABC
- 获取java中jvm启动的线程信息
- System类和JAVA程序启动是JVM中的详细信息
- Java程序的运行原理及JVM的启动是多线程的吗?
- Java程序中启动一个线程是用run()还是start()?
- eclipse启动的java程序使用的jvm参数
- 在执行Java命令或eclipse启动程序,提示报错’jvm.cfg无法找到’的解决办法
- Java程序的运行原理及JVM的启动是多线程的吗?
- Linux后台启动程序以及打开XShell连接运行java -jar然后关闭连接程序不再运行问题
- 在程序世界,寻找更多精彩——线程的启动
- Java学习笔记72. 操作线程 -- 判断线程是否启动
- JAVA程序启动单一实例妙招
- java.lang.ProcessBuilder.command(String command)方法实例 代替命令行方式启动程序
- Java线程:创建与启动
- Linux(Ubuntu)下设置开机启动shell脚本执行Java程序jar包
- java 多线程同步--多个线程启动执行同一段代码
- Java 之 线程的创建和启动(三)
- 编写高质量代码改善C#程序的157个建议——建议75:警惕线程不会立即启动