jvm虚拟机运行时数据区

时间:2022-12-27 20:09:01

jvm虚拟机运行时数据区

1、程序计数器:是一块较小的内存空间,他可以看作是当前线程所执行的字节码的行号指示灯。字节码解析器工作就是通过改变这个计数器的值来选取下一条需要执行的字节码指令、分支、循环、跳转、异常处理、线程恢复等基础功能需要依赖这个计数器来完成。每个线程都需要有一个自己的独立计数器,各个线程互不影响,独立存储。

2、虚拟机栈:java方法执行的内存模型->每个方法在执行的同时会创建一个栈帧用于存储局部变量、操作数栈、动态链接、方法出口等信息,每个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。

3、本地方法栈:本地方法栈与虚拟机所发挥的作用是非常相似的,他们之间的区别不过是虚拟机栈为虚拟机执行java方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的Native方法服务

4、java堆:java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。在java虚拟机规范中的描述如下:所有的对象实例以及数组都要在堆上分配,但随着JIT编译器的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化发生,所有的对象都分配在堆上也渐渐变得不是那么绝对了。

5、方法区:与java堆一样,是线程共享内存区域,它用于存储一杯虚拟机加载的类信息、常理、静态变量、即时编译器编译后的代码等数据。虽然java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap(非堆),目的应该是java堆区分开发。

 

以上内容为“深入理解java虚拟机”,初次了解jvm想把目前我认为有帮助的记录下来也分享给大家。还希望大家多多指教。后续会陆续更新jvm虚拟机相关资料