java虚拟机------java内存结构

时间:2022-12-26 18:10:40



1、程序计数器:

是一块较小的内存空间,其作用可以看做是当前线程所执行的行号指示器,字节码解析器工作时通过该变程序计数器的值来选取下一条需要执行的字节码指令。程序的分支-循环跳转、异常处理以及线程恢复等基础功能都是依赖程序计数器来完成。


java虚拟机你的多线程通过线程轮流切换并分配处理器时间偏来实现,任何一个时刻,一个处理器只会执行一条线程指令,因此,为了确保线程切换只会能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,因此程序计数器是线程私有的内存。


程序计数器是java虚拟机中唯一一个没有规定内存溢出outofmemoryEoor的内存区域。


2、java虚拟机栈。

java虚拟机栈也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是java方法执行的内存模型。每个方法在被执行时都会同时创建一个栈帧用于存放局部变量表、操作数栈、



3:本地方法栈。

本地方法栈与java虚拟机栈的作用非常类似,其区别是:java虚拟机栈是为虚拟机执行java方法服务,而本地方法栈是为虚拟机调用的操作系统本地方法服务。


java虚拟机规范没有对本地方法栈的实现和数据结构做强制规定,虚拟机直接把java虚拟机栈和本地方法栈合二为一。




4、堆:

堆是java虚拟机sun管理的内存区域中最大的一块,java堆是被多有现成所共享的一块内存区域,在java虚拟机启动时创建,堆内存的唯一目的就是存放对象实例。几乎所有的对象实例都是分配在堆内存中。




5、方法区。

方法区与堆一样,是被各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、变量、惊天变量、计时编译后的代码等数据。虽然java虚拟机规范把方法区描述为堆的一个逻辑部分,但是方法区却有一个别名叫非堆。