JVM -- 运行时数据区之本地方法栈、PC寄存器、虚拟机栈
0、前言
此文所有讨论基于 HotSpot VM
1、运行时数据区概览
JAVA 中有个 Runtime 类表示了运行时环境(每个 JVM 进程对应唯一的一个 Runtime 对象)
2、多线程和系统线程的对应模型
JAVA 是支持多线程的,学过 OS 就知道,操作系统中内核级别的线程和用户级别的线程是有映射关系的(一对一、一对多、多对多),JVM 中的线程是需要映射和对应到本地操作系统的实际线程,对应的方式由不同的 JVM 实现方式(即不同的虚拟机)来决定,下面贴一段《操作系统概念》里面的原话,这些知识具体可参考此链接
HotSpot使用的是一对一的模型
3、程序计数器
两个问题:
1)为什么要使用 PC寄存器 or 使用 PC寄存器有什么好处?
2)PC寄存器为什么是每个线程私有这种设定?
4、虚拟机栈
栈的优点
栈的运行原理:
栈帧的基本内容:
局部变量表、操作数栈、方法返回地址、附加信息 => 参考链接
动态链接 => 参考链接
5、本地方法栈
本地方法栈与虚拟机栈的作用是一样的,区别在于虚拟机栈为虚拟机执行java方法服务,而本地方法栈为虚拟机执行native方法服务,native方法为本地方法,不是用java语言写的有可能是c或者c++写的,在jdk中就有很多c的代码,就是提供给本地方法来调用的。