jvm运行时数据区

运行时数据区

Java虚拟机定义了执行程序时使用的各种运行时数据区域。其中一些是在虚拟机启动时创建,虚拟机退出时才销毁;另外一些是在线程创建时创建,线程退出时销毁。

运行时数据区

1.程序计数器

jvm支持多线程同时执行,每个线程都有自己的程序计数器。线程正在执行的方法叫做当前方法。若是java代码,则PC Register是当前正在执行的指令地址。若是NATIVE代码,则为空。

2.虚拟机栈

虚拟机栈是线程私有的,生命周期和线程相同。描述的是java方法执行的内存模型:每个方法在执行时创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等。每个方法从调用到执行完成,对应一个栈帧入栈到出栈的过程。

3.本地方法栈

native方法

4.方法区

方法区和堆一样都是线程共享的内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。jdk8称为metaspace, jdk7以前叫做permgen space

常量池:运行时常量池是方法区的一部分,用于存放编译期产生的各种字面量和引用等。

5.堆

堆是虚拟机管理的最大一块内存,所有线程共享,在虚拟机启动时创建。此区域的唯一目的就是存放对象实例,几乎所有对象的实例都在这里分配内存。java可以在物理上不算连续的,只要逻辑上是联系的即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。