一 、什么是java虚拟机—JVM
- 抽象规范
- 一个具体的实现
- 一个运行中的虚拟机实例
二、 JVM的生命周期
java程序启动时虚拟机实例诞生,程序关闭推出时,虚拟机实例消亡。
一个程序对应一个虚拟机实例。
main()方法作为程序的初始线程的起点,任何其他线程都是由这个初始线程启动的
虚拟机内部包含两种线程:守护线程和非守护线程,也叫后台线程和普通线程。只要非守护线程结束,守护线程不管结束没结束都得停止。
只要有任何非守护线程运行,java程序就在运行,虚拟机就存活。
当所有非守护线程都终止时,虚拟机实例将自动退出
三、虚拟机体系结构
类装载器子系统,内存区, 执行引擎
- 类装载器
装入类型(类和接口),也就是加载编译后的class文件
- 运行时数据区(内存区)
用来存储程序运行时数据,例如字节码,从已装载的class文件中得到的其他信息,程序创建的对象,传递给方法参数,返回值,局部变量,以及运算的中间结果。
方法区和堆由虚拟机中所有线程共享。
每个线程对应一个java栈和一个pc寄存器,这些内存区都是线程私有的,不能相互访问
- 方法区:存放类信息,方法,静态变量等
- 堆: 存放创建的对象,包括成员变量信息
- java栈:存储方法线程中方法调用的状态。
由栈桢构成,栈桢对应一个方法调用的状态。
线程每调用一个方法,就压入一个栈桢(传递给方法参数,返回值,局部变量,以及运算的中间结果)- pc寄存器:指向下一条将被执行的指令。
本地方法栈:本地方法调用的状态,是以某种依赖于具体实现的方式存储在本地方法栈中,也可能是在寄存器或者其他耨写特定实现相关的的内存区中。
- 执行引擎
执行 包含在装在类中方法中的指令