JVM运行时数据区内存模型简单总结

本文详细介绍了Java虚拟机(JVM)中的各个内存区域,包括程序计数器、虚拟机栈、本地方法栈、堆、方法区及运行时常量池。解释了各区域的作用、特性以及可能引发的异常情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据区图解:
这里写图片描述


程序计数器

首先,它是一块分配的较小的内存空间,线程私有,作用类似于PC寄存器,单它仅仅是逻辑上的。
如果线程正在执行Java方法,那么计数器记录的为正在执行的虚拟机字节码的指令地址,如果为Native方法,计数器值为空。同时,它是唯一一个没有规定 OutOfMemoryError的区域

虚拟机栈

线程私有,毕竟每个线程都要执行独立的方法对吧。 它是描述Java方法执行的内存模型,每个方法都会创建一个栈帧数据结构,其中保存这局部变量表,操作数栈等等,虚拟机规范中对其有两个异常状况描述:一个是OutOfMemoryError,另一个就是我们常见的StackOverFlowError,对于某些不可动态扩展的虚拟机栈的虚拟机来说,这就是常见的递归造成的错误。

本地方法栈

线程私有,同样两个Error描述,它是Native方法的执行模型。由于功能相似,在HotSpot虚拟机中将两个合二为一了。

线程共享,所有对象的实例和数组都分配在此,是GC管理的主要区域,同样两个Error定义。

方法区

线程共享,存储被虚拟机加载的类的信息,常量,类变量等等。虚拟机规范将其描述为对的一个逻辑部分,但是有一个别名Non-Heap。大多数人将其成为永久代,但是其实两者并不等价,HotSpot设计团队使用永久代来实现方法区罢了,在JDK1.7的HotSpot中,已经将字符串常量池移出方法区。

运行时常量池

它是方法区的一部分,用于存放编译期生成的各种字面量和符号引用,它具有动态性,String类的intern()方法。


多复习多复习。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值