《JVM学习》8、方法区

方法区

运行时数据区结构图

在这里插入图片描述

堆和方法区图例

在这里插入图片描述

1、栈、堆、方法区的交互关系

从线程共享与否角度来看

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、方法区的理解

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、设置方法区大小与OOM

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

OOM 举例

在这里插入图片描述

如何解决OOM

在这里插入图片描述

4、方法区内部结构

在这里插入图片描述
在这里插入图片描述

1、类型信息

在这里插入图片描述

2、域信息

在这里插入图片描述

3、方法信息

在这里插入图片描述

运行时常量池VS常量池

常量池是什么

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

运行时常量池

在这里插入图片描述

5、方法区使用举例

不涉及堆空间()因为没有new

在这里插入图片描述
在这里插入图片描述

sipush_500 => 往操作数栈中放入500

在这里插入图片描述

istore_1 往局部变量表中1号下标的位置放500的数值

在这里插入图片描述

bipush_100 往操作数栈中入栈100

在这里插入图片描述

istore_2 在局部变量表下标为2的地方存100,操作数栈内的100出栈
在这里插入图片描述

在这里插入图片描述

iload_1 iload_2 把局部变量表里的 1和2号下标的值,压入到操作数栈中

在这里插入图片描述

除法操作 在操作数栈中操作,栈顶放最终结果

在这里插入图片描述

把计算的最终结果放到栈顶

在这里插入图片描述

把50存到局部变量表的4号下标位置

在这里插入图片描述

常量池内容 ,找对应的常量

在这里插入图片描述

getstatic #2 找常量池中 #2的符号引用对应的常量信息,最终转换成直接引用。

在这里插入图片描述

iload_3 iload_4 将局部变量表中下标 3和4的数字放到操作数栈中

在这里插入图片描述
在这里插入图片描述

iadd做累加运算

在这里插入图片描述

通过#3的符号引用找到对应的常量信息

在这里插入图片描述

return 方法执行结束

在这里插入图片描述

6、方法区的细节演示

在这里插入图片描述

演变过程

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

永久代为什么会被元空间替代

在这里插入图片描述

在这里插入图片描述

StringTable 为什么要调整

在这里插入图片描述

静态变量放在那里

在这里插入图片描述

7、方法区的垃圾回收

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8、总结

在这里插入图片描述

9、常见面试题

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pywanggui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值