jvm启动的几个线程作用:
Signal Dispatcher
: 接受各种信号;Attach Listener
: 监听各种请求的socket连接,把执行的操作扔给VM Thread
。
这里的请求包括:1
2
3
4
5
6
7
8
9
10
11
12
13static AttachOperationFunctionInfo funcs[] = {
{ "agentProperties", get_agent_properties },
{ "datadump", data_dump },
{ "dumpheap", dump_heap },
{ "load", JvmtiExport::load_agent_library },
{ "properties", get_system_properties },
{ "threaddump", thread_dump },
{ "inspectheap", heap_inspection },
{ "setflag", set_flag },
{ "printflag", print_flag },
{ "jcmd", jcmd },
{ NULL, NULL }
};VM Thread
: 线程母体,最原始的线程,单例,里面有个队列,存放上面的操作,它负责loop处理队列中的操作.(包括对其他线程的创建,分配和对象的清理,cms-mark等工作)CompilerThread0
: JIT动态编译线程;ConcurrentMark-SweepGCThread
: CMS垃圾收集线程;DestroyJavaVM
: 负责卸载JVM的线程;ContainerBackground Processor
: JBoss守护线程;Dispatcher-Thread-3
: Log4j异步日志守护线程;Finalizer
: 垃圾回收守护线程;Gang worker#0
: 新生代回收线程;GC Daemon
: RMI远程GC线程(调用system.gc()
);Low MemoryDetector
: 发现可用内存低,则分配新的内存空间;process reaper
: 执行os命令;Reference Handler
: 处理引用对象本身(软、弱、虚引用)的垃圾回收问题;SurrogateLockerThread
: CMS垃圾回收;VM Periodic Task Thread
: 定期的内存监控、JVM运行状况监控。