虚拟机结构图
从图中看出:
JVM虚拟机主要有三大部分组成:
1. 类加载器
2. JVM运行时内存
3. 执行引擎
一、类加载器
类加载器主要用来加载字节码文件(.class)到内存中
二、内存结构
如图:可将内存分为两大部分,一、线程共享内存区域;二、线程私有内存区域
2.1 线程共享内存
共享内存有两部分:方法区、堆内存
- 方法区:主要用来存储类加载器加载的类的原始数据,如类名、类的继承信息、类上的注解信息等等;
- 堆内存:凡是创建的新的对象都会放到堆内存中,如
new Student()
2.2 内存私有内存
私有内存主要有三块:程序计数器、JVM虚拟机栈、本地方法栈
- 程序计数器:主要是记录当前线程被CPU执行程序的行数,方便CPU下次切换过来继续执行;
- JVM虚拟机栈:用来存储局部变量、对象引用信息、方法参数信息等;
- 本地方法栈:用来存储本地方法的内容,本地方法指JVM需要依托操作系统才能执行的方法,需要通过JVM调用操作系统来完成的一些事件。
三、执行引擎
执行引擎主要分为三部分:解释器、即时解释器(JIT)、垃圾回收器(GC)
- 解释器:因为JVM目前执行的是.class字节码文件,但是CPU无法识别字节码,CPU只能识别机器码,所以.class需要通过解释器来将字节码文件解释为机器码;
- 即时解释器:如果所有的.class在运行的时候都需要解释,那么效率将会不高,所有JVM提出热点代码的概念,即时解释器可以发现热点代码(经常执行的代码片段),将其机器码缓存起来,来保证热点代码的即时解释;
- 垃圾回收器:用来回收对象,释放内存。