一、JVM结构
1.类装载器
在JVN启动时或者类运行时,将class文件加载到JVM中。
2.执行引擎
执行class文件中的字节码指令。
3.本地库接口
主要是调用C或C++实现的本地方法及返回结果。
4.内存区域
(1)方法区:方法区中存储了类的信息,比如常量池,构造函数,静态变量等。方法区中还有运行时常量池。常量池分为静态常量池和运行时常量池。静态常量池不仅包含字面常量,还包括类和接口的全限定名,字段名称和描述符,方法名称和描述符。可以理解为class文件在内存中的位置。运行时常量池是JVM虚拟机完成类装载后,将class文件中的常量池载入到内存,并保存在方法区。而常说的方法区中的常量池指的是运行时常量池。
(2)Java堆:存放实例或对象的地方,也是GC的主要区域。方法区和堆是被所有线程共享的。
(3)Java栈:总是和线程关联在一起,每当创建一个新线程,JVM就会为这个线程创建一个Java栈。Java栈中包含一个或多个栈帧,线程每运行一个方法就会创建一个栈帧,用来存放局部变量,返回值等。每一个方法执行完的过程,就对应一个栈帧从入栈到出栈的过程,Java栈是线程私有的。
(4)程序计数器:用于保存当前线程执行的内存地址,由于JVM是多线程执行的(线程执行过程中会切换)