jvm在java程序运行时会将它所管理的内存划分成不同的区域做不同的功能,这并不难以想象。主要有两类结构,即:堆和栈。
java堆主要是保存运行时的对象和数组数据,是所有线程共享的内存区域,在堆中有方法区、运行时常量池。方法区是代码的存储区,类、方法数据、方法的字节码、字段、构造函数等信息都会存储在这里。
运行时常量池是存放类或接口中的方法和数据的常量池,当类或接口被加载的时候就会产生对应的运行时常量池,里面存储了从编译期可知的字面量到运行期才解析出来的方法和字段引用。
jvm的线程是通过栈结构来实现的。jvm中一个线程对应一个栈,称为虚拟机栈。每个虚拟机栈里都会有PC寄存器用来记录该线程中将要执行的指令。具体的线程执行的方法对应虚拟机栈中的栈帧结构。一个方法对应一个栈帧。当线程调用一个方法就会创建一个栈帧,退出这个方法就会销毁这个栈帧。栈帧里有两个重要的结构就是:局部变量表和操作数栈。jvm通过局部变量表完成方法调用时的参数传递,参数按顺序从位置0开始,当调用实例方法时,位置0上的参数是类对象的引用即this,后续参数从位置1往下排。操作数栈是存储当前栈帧(方法)执行时的操作数,我的理解就是存储方法在执行过程中的临时变量。
jvm的运行时数据区
时间: 2024-10-16 01:55:23