Java运行时内存区域

 Java运行时内存区域分为方法区、堆、虚拟机栈、本地方法栈、程序计数器。

其中方法区和堆是所有线程共享的数据区,而其他的区域是线程隔离的。

1.程序计数器:可以看作当前线程所执行的字节码的行号指示器。

如果线程正在执行一个Java方法,则程序计数器记录的是正在执行的虚拟机字节码指令的地址。

如果线程执行的是本地方法,则程序计数器的值为空。

程序计数器是唯一一个没有OOM(OutOfMemoryError)异常的区域

2.Java虚拟机栈:描述的是Java方法执行的线程内存模型。

每个方法被执行的时候,JVM都会同步创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口。

每一个方法被调用到完毕,对应着一个栈帧在VM中从入栈到出栈。

异常:当栈shendu超出最大值时,抛出StackOverflowError;若Java虚拟机栈容量可以动态扩展,当栈扩展时,无法申请到足够的内存,抛出OOM异常。

3.本地方法栈:为VM使用本地方法服务。

异常:栈深度溢出,抛出StackOverflowError;当栈扩展时,无法申请到足够的内存,抛出OOM异常。

4.Java堆:存放对象实例、数组等。

被垃圾收集器管理,所以也叫GC堆。

异常:当Java堆没有内存完成实例分配时或堆无法扩展时,抛出OOM异常。

5.方法区:存储已被VM加载的类型信息 、常量、静态变量、即时编译器编译后的代码缓存等数据。 

注意:本质上方法区不等于永久代。

异常:当方法区无法满足新的内存分配时,抛出OOM异常。

6.运行时常量池:存放编译期间生成的各种自面量与符号引用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值