运行时数据区
虚拟机栈(线程私有)
由栈帧组成,每个栈帧由局部变量,动态链接,方法返回地址,操作数栈组成
- 局部变量:主要存放的是各种数据类型和对象引用
- 操作数栈:主要存放方法执行过程中产生的中间计算结果,还存放计算过程中产生的临时变量
- 动态链接:主要服务于一个方法调用另外一个方法的场景。class存放着大量的符号引用,当方法需要调用其它方法时,会将其方法的在常量池中的符号引用转换成内存地址直接调用,这个过程就叫做动态链接。
- 方法返回地址:
本地方法栈(线程私有)
调用操作系统底层api
程序计数器(线程私有)
程序计数器可以看做当前线程所执行字节码的行号指示器。在java虚拟机中字节码解释器就是通过改变程序计数器里的值来执行下一条字节码指令,
堆内存(线程共享)
主要存储对象实例,数组
方法区(线程共享)
方法区是JVM运行时数据区的一块逻辑区,是所有线程共享的区域。
方法区主要存储是被虚拟机加载的类信息,字段信息,常量,静态变量,方法信息,即时编译器编译过后的代码换成