jvm运行时数据区域


jvm运行时数据区域可以分为:本地方法栈、虚拟机栈、堆、方法区、程序计数器(PC 寄存器)几个区域。其中,程序计数器、本地方法栈、虚拟机栈都是线程私有的。

运行时数据区域

本地方法栈

虚拟机栈

线程私有,声明周期和用户线程相同,为线程开启一块空间,线程之间互不影响。
每个方法执行的时候都会开辟一块空间被称为栈帧
一些基础类型基本上(并非绝对)都是存储存储在局部变量表
变量之间的一些运算会在操作数栈中完成,涉及到出栈和入栈的操作
是有个参数-Xss可以设置虚拟机栈的大小,具体是否有作用,看虚拟机厂商的实现。

当虚拟机栈深度大于可申请的深度时,将会导致栈内存溢出的错误

java.lang.StackOverflowError

这是整个jvm运行时数据区最大的一块区域,属于线程共享区域。

-Xms
-Xmx
可以设置堆内存大小

堆内存区域中有个Survivor区和eden区,Survivor区又分为s0区、s1区。年代区域
其中minor gc 会回收新生代区域的内存
新创建的对象会被放到eden区域,在触发minor gc 的时候会比较分代年龄,如果分代年龄大于15的时候会放入老年代,否则的话会选择进入s0还是s1,并且分代年龄加一
gc root 表示引用的根节点,每次gc的时候都从根节点开始
full gc 会清理堆和方法区。进行full gc的时候会发生stw(停止整个世界),短暂暂停用户线程
堆内存溢出的时候会发生:

java.lang.OutOfMemoryError: Java heap space

方法区(元数据区)

方法区存储类的元信息,静态变量,常量,字符串

程序计数器

线程私有,可以理解为程序执行到了哪行 。

持续更新中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值