JVM架构哪些事

JAVA虚拟机

每个java程序都是运行在某个具体的java虚拟机实现的实例上,一个java虚拟机负责运行一个java程序,当启动一个java程序的时候,一个虚拟机就诞生了,当该程序关闭时,这个虚拟机实例也就随之消亡。java

1 JVM线程c++

  • 守护线程;一般是虚拟机本身使用,好比GC线程,可是java程序能够将本身的线程设置为守护线程,可是必须在start()方法以前调用
  • 用户线程:即main方法执行的线程

当程序中全部的非守护线程(即用户线程)都结束时,虚拟机实例将自动退出。于是,守护线程不适合作IO操做,由于守护线程是在全部的非守护线程推出后结束,这样并不能表明守护线程是否完成了相应的操做,若是非守护线程退出后,还有大量的数据没有写,将会引起数据丢失问题线程

2 JVM结构对象

-类装载子系统继承

每个JVM都有一个类装载系统,它会跟著给定的全限定名来装载类型、class文件等内存

  • 执行引擎

    每个JVM都有一个执行引擎,他负责执行哪些包含在装载类中的指令ssl

  • 运行时数据区

    当JVM运行一个程序的时候,它须要内存来进行存储不少的东西,好比计算时的中间变量,程序建立的对象,返回值等等,运行时数据区就相似于内存,存存这些东西,每一个运行区包含方法区,堆,JAVA栈,PC寄存器,本地方法栈等
    (1)当虚拟机装载一个class文件时,它会从class文件包含的二进制数据中解析类型信息,而后将这些信息放在方法区中虚拟机

    (2)当程序运行的时候,虚拟机就会把全部线程在运行时建立的对象都放在堆中class

    (3)若是线程正在执行的是一个JAVA方法,那么寄存器的值(程序计数器)老是指向下一条将被执行的指令变量

    (4)JAVA栈则老是存储该线程中JAVA方法调用的转台--包括它的局部变量、被调用时传进来的参数、返回值、以及中间结果等等。JAVA栈是由不少的栈帧或这说是帧等组成,一个栈帧包含一个方法调用状态,当现场调用一个JAVA方法的时候,虚拟机压入一个方法到该线程的JAVA栈中,当方法返回时,这个栈帧就会从JAVA栈中弹出并抛弃

3 类加载器

JAVA类加载器是JAVA运行时环境的一部分,负责动态的将JAVA类加载到JAVA虚拟机的内存空间中,类一般是按需加载,即第一次使用该类时才加载,类装载系统除了要定位和导入二进制class文件外,还必须验证被导入类的数据的正确性,为变量分配初始化内存,以及帮助解析符号引用等,这些动做按照如下循序执行

(1)装载-查找并装载二进制数据

(2)连接-执行验证、准备等

(3)初始化

4 启动类装载器

由原生代码c++编写,它负责加载核心JAVA库

5 用户自定义类装载器

继承classloard类,用户自定义的类装载器

相关文章
相关标签/搜索