方法区
运行时数据区结构图
堆和方法区图例
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、常见面试题