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的代码,就是提供给本地方法来调用的。
 
 
posted @ 2020-04-02 20:11  qwerity  阅读(384)  评论(0编辑  收藏  举报