3、运行时数据区概述及线程
一、概述
按照HotSpot虚拟机讲解,JRockit和J9是没有方法区的。
运行时数据区的内部结构
运行时数据区分为:元空间、堆、虚拟机栈、程序计数器、本地方法区。
关于线程间共享的说明
二、线程
JVM系统线程
4、程序计数器/PC寄存器(PC Rigister)
一、PC Rigister介绍
二、举例说明
int i = 10;
int j = 20;
int k = i + j;
String s = "abc";
System.out.println(i);
System.out.println(k);
三、两个常见问题
问题一
用于记录下一条要执行的字节码指令。
问题二
因为CPU会在线程间切换着运行,所以每个线程都需要记录自己下一条执行什么字节码指令。
CPU时间片
5、虚拟机栈
一、虚拟机栈概述
虚拟机出现的背景
内存中的栈与堆
虚拟机栈基本内容
二、栈的存储单位
一个线程是一个栈,一个方法是一个栈帧。
栈运行原理
栈帧的内部结构
栈帧分为:局部变量表、操作数栈、动态链接、方法返回地址、一些附加信息(后三个合一起可称为帧数据区)。
三、局部变量表(Local Variables)
如果此方法不是静态的,那么此局部变量表的第一位自动写入this。
关于变量槽Slot的理解
Slot的重复利用
静态变量与局部变量的对比
JVM会为成员变量进行初始化赋值,但不会为局部变量进行初始化,需要我们自己给局部变量赋值。
四、操作数栈(Operand Stack)
五、代码追踪
六、栈顶缓存技术
七、动态链接(指向运行时常量池的方法引用)
八、方法的调用:解析与分派
虚方法与非虚方法
关于invokedynamic指令
方法重写的本质
虚方法表
九、方法返回地址(Return Address)
十、一些附加信息
栈帧中不一定会有。
十一、栈的相关面试题
6、本地方法接口
native修饰的方法就是本地方法。此方法虽然看起来像是没有方法体,实际上它是有方法体的,只不过它的方法体是用非java代码实现的,和abstract抽象方法不相同。
7、本地方法栈
下一篇笔记:JVM入门学习笔记——上篇:内存与垃圾回收(8-9)
学习视频(p39-p65):https://www.bilibili.com/video/BV1PJ411n7xZ?p=39