博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM进程启动会启动哪些线程?
阅读量:5214 次
发布时间:2019-06-14

本文共 1631 字,大约阅读时间需要 5 分钟。

首先要明白一点:JVM本身是一个多线程的程序,和我们编写的java应用程序一样,当JVM启动执行时就是在操作系统中启动了一个JVM进程。我们编写的java单线程或多线程应用进程都是在JVM这个程序中作为一个或多个线程运行。

每当使用java命令执行一个带main方法的类时,就会启动JVM(应用程序),实际上就是在操作系统中启动一个JVM进程,JVM启动时,必然会创建以下5个线程:

1-main                                   主线程,执行我们指定的启动类的main方法

2-Reference Handler             处理引用的线程 

3-Finalizer                              调用对象的finalize方法的线程,就是垃圾回收的线程 

4-Signal Dispatcher               分发处理发送给JVM信号的线程  

5-Attach Listener                   负责接收外部的命令的线程

Attach Listener :该线程是负责接收到外部的命令,执行该命令,并且把结果返回给发送者。通常我们会用一些命令去要求jvm给我们一些反馈信息,如:java -version、jmap、                                     jstack等等。如果该线程在jvm启动的时候没有初始化,那么,则会在用户第一次执行jvm命令时,得到启动。

signal dispather: 前面我们提到第一个Attach Listener线程的职责是接收外部jvm命令,当命令接收成功后,会交给signal dispather线程去进行分发到各个不同的模块处理命令,并                                  且返回处理结果。signal dispather线程也是在第一次接收外部jvm命令时,进行初始化工作。

Finalizer:  JVM在垃圾收集时会将失去引用的对象包装成Finalizer对象(Reference的实现),并放入ReferenceQueue,由Finalizer线程来处理;最后将该Finalizer对象的引用置为null,由垃圾收集器来回收。

Reference Handler :它主要用于处理引用对象本身(软引用、弱引用、虚引用)的垃圾回收问题。

main:主线程,用于执行我们编写的java程序的main方法。

 

可编写java应用程序查看JVM启动时创建的所有线程,代码如下:

package com.jvmTest;

import java.lang.management.ManagementFactory;

import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;

public class JVMTest {

  public static void main(String[] args) throws Exception {
    ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
    ThreadInfo[] threadInfos = threadMXBean.dumpAllThreads(false, false);
    for(ThreadInfo threadInfo : threadInfos) {
      System.out.println(threadInfo.getThreadId() + "-" + threadInfo.getThreadName());
    }
  }
}

----------------------------------------------

输出如下:

5-Attach Listener

4-Signal Dispatcher
3-Finalizer
2-Reference Handler
1-main

转载于:https://www.cnblogs.com/jiangwangxiang/p/9094006.html

你可能感兴趣的文章
中国对地观测卫星介绍
查看>>
Services
查看>>
Animation and Graphics Overview
查看>>
php对某个页面设置基础认证登录设置
查看>>
贪吃蛇
查看>>
Iterm2的一些好用法
查看>>
java拦截器(Interceptor)学习笔记
查看>>
java中取小数点后两位(四种方法)
查看>>
bzoj3275: Number
查看>>
android Activity启动过程(三)从栈顶Activity的onPause到启动activityon的Resume过程
查看>>
区块链记账原理
查看>>
python3 安装scrapy
查看>>
表格作业
查看>>
JMeter-MyEclipse编译运行问题(Could not read JMeter properties file)
查看>>
Java反射
查看>>
OO第四单元总结暨学期总结
查看>>
mysql5.7慢查询开启配置
查看>>
关于Android Force Close 出现的原因 以及解决方法
查看>>
收藏几个好的博文
查看>>
Spring中AOP的两种代理方式(Java动态代理和CGLIB代理-转载
查看>>