运行时数据区
Java虚拟机定义了执行程序时使用的各种运行时数据区域。其中一些是在虚拟机启动时创建,虚拟机退出时才销毁;另外一些是在线程创建时创建,线程退出时销毁。
运行时数据区1.程序计数器
jvm支持多线程同时执行,每个线程都有自己的程序计数器。线程正在执行的方法叫做当前方法。若是java代码,则PC Register是当前正在执行的指令地址。若是NATIVE代码,则为空。
2.虚拟机栈
虚拟机栈是线程私有的,生命周期和线程相同。描述的是java方法执行的内存模型:每个方法在执行时创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等。每个方法从调用到执行完成,对应一个栈帧入栈到出栈的过程。
3.本地方法栈
native方法
4.方法区
方法区和堆一样都是线程共享的内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。jdk8称为metaspace, jdk7以前叫做permgen space
常量池:运行时常量池是方法区的一部分,用于存放编译期产生的各种字面量和引用等。
5.堆
堆是虚拟机管理的最大一块内存,所有线程共享,在虚拟机启动时创建。此区域的唯一目的就是存放对象实例,几乎所有对象的实例都在这里分配内存。java可以在物理上不算连续的,只要逻辑上是联系的即可。
网友评论