作者:violalal_134 | 来源:互联网 | 2023-09-18 13:34
jvm内存结构方法区和堆是所有线程共享的内存区域;而java栈、本地方法栈和程序计数器是运行是线程私有的内存区域。每个线程都有一个独立的栈和程序计数器。主要关注内存结构,以及各自存储什么内容。Java
jvm内存结构
方法区和堆是所有线程共享的内存区域;而java栈、本地方法栈和程序计数器是运行是线程私有的内存区域。每个线程都有一个独立的栈和程序计数器。
主要关注内存结构,以及各自存储什么内容。
- Java堆(Heap),是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。
- 方法区(Method Area),方法区与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、方法字节码信息(包括静态方法和实例方法)即时编译器编译后的代码等数据。
- 程序计数器(Program Counter Register),程序计数器是一块较小的内存空间,它是在线程启动时创建的,大小为一个字长。它的作用可以看做是当前线程所执行的下一条字节码指令的位置。
- Java栈(Java Stacks),与程序计数器一样,也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame),用于存储局部变量表、方法参数、中间运算结果等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
- 本地方法栈(Native Method Stacks)。这是 Java调用操作系统本地库的地方。
- 执行引擎,Java虚拟机的核心,控制装入 Java 字节码并解析;对于运行中的Java程序而言,每一个线程都是一个独立的虚拟机执行引擎的实例,从线程生命周期的开始到结束,他要么在执行字节码,要么在执行本地方法。