讲一讲JVM内存模型

JVM内存模型其实应该可以分为三大块,一块是加载类子系统,一块是字节码执行引擎,一块才是运行时数据区

加载类子系统负责将class文件加载进内存,放进方法区并暴露Class对象到堆中

字节码执行引擎负责对方法区中的代码进行执行

运行时数据区分为堆,方法区,栈,本地方法栈和程序计数器五大模块

堆和方法区是所有线程共享的,方法区主要就是存放代码结构,常量池及静态变量等,

堆主要存放对象实例,这些对象实例的地址分别由方法区里面的变量及栈里面的变量来指向

 

而栈,本地方法栈及程序计数器是线程私有的,每个执行的线程都在这些区域中拥有自己的一块小区域

本地方法栈主要存放执行方法的栈帧,每个方法对应一个栈帧,而栈帧主要包含局部变量表,

操作数栈,动态链接及方法出口

局部变量表顾名思义就是存放执行方法过程中局部变量的值

操作数栈主要用于当执行变量之间的操作的时候,首先会将局部变量表中的变量压入操作数栈中,再从操作数栈中弹出进行处理

动态链接主要是存放了常量池中需要运行时才确定的符号引用对应的直接引用

方法出口,就是保存当前执行到方法的哪一步,当执行完方法中的其他方法后,回到原本的方法还能找到对应的执行的位置继续往下执行

 

程序计数器主要就是存放执行的指令对应的行数,方便后续继续执行下一条指令

本地方法栈就是用于执行本地方法的时候提供所需要的的栈存储空间

 

 

JVM(Java虚拟机)内存模型是指在JVM运行Java程序时,用于存储类信息、常量、静态变量、即时编译器编译后的代码等数据的内存区域的结构。JVM内存模型包括以下几个主要部分: 1. 堆(Heap):堆是JVM所管理的最大的一块内存空间,它是所有线程共享的内存区域。几乎所有对象的实例以及数组都在这里分配内存。 2. 栈(Stacks):栈也称为虚拟机栈,是线程私有的内存区域。每个方法在执行时都会创建一个栈帧(Stack Frame),用于存储局部变量表、操作数栈、动态链接、方法出口等信息。当方法执行完毕,栈帧就会被弹出栈。 3. 方法区(Method Area):方法区也是线程共享的内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 4. 程序计数器(Program Counter Register):程序计数器是线程私有的内存区域,它是一个较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。在JVM的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。 5. 本地方法栈(Native Method Stacks):本地方法栈与虚拟机栈的作用相似,不同的是,本地方法栈是为了支持虚拟机使用本地(Native)方法服务的。 JVM内存模型的设计是为了支持Java语言的运行时特性,如自动内存管理(垃圾回收机制)、类加载机制等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值