JVM体系结构篇之JVM的整体结构
上图为JVM在服务器上的整体结构图,从上到下简单介绍一下。
.class:由.java(也可是其他文件)文件通过编译器编译得到字节码文件。
类加载器子系统:将磁盘上的字节码文件转换为instanceKlass 保存在运行时数据区(方法区)中,一个字节码文件通过类加载子系统添加到运行时数据区需要经过加载、连接、初始化三个步骤。
运行时数据区:JVM在执行java程序的过程中所管理的内存(会根据其职责或分为多个区域)。
执行引擎:将程序计数器中记录的字节码指令转换为机器语言。与程序计数器的双向箭头是由于,执行引擎在程序计数器中获取了某条指令执行后会将程序计数器中的值改为下条指令地址是双向的;与本地接口库的单向箭头代表,可能程序计数器中的某条指令代表调用Native方法,此时执行引擎解释执行时需要访问本地接口库。
本地方法接口库:存放了java代码中定义的Native方法接口。本地方法在本地方法栈中的压栈出栈操作对应了本地方法栈和本地接口库的双向箭头,本地方法的执行无需程序计数器和执行引擎协助。程序计数器记录的是方法的字节码指令地址,执行引擎也只能解释执行字节码指令,二者都是JVM层面的抽象概念,而Native并不是java代码编写的也不存在字节码指令,所以Native方法的执行直接由原生的CPU上真正的PC寄存器负责。
本地方法库:存储了本地接口的方法实现。
附:附带一个面试题,如果执行Native方法时,程序计数器不存储值,那么线程切换后如何恢复原位继续执行?
这里的“pc寄存器”(即程序计数器)是在抽象的JVM层面上的概念——当执行Java方法时,这个抽象的“pc寄存器”存的是Java字节码的地址。实现上可能有两种形式,一种是相对该方法字节码开始处的偏移量,叫做bytecode index,简称bci;另一种是该Java字节码指令在内存里的地址,叫做bytecode pointer,简称bcp。对native方法而言,它的方法体并不是由Java字节码构成的,自然无法应用上述的“Java字节码地址”的概念。所以JVM规范规定,如果当前执行的方法是native的,那么pc寄存器的值未定义——是什么值都可以。上面是JVM规范所定义的抽象概念,那么实际实现呢?
Java线程总是需要以某种形式映射到OS线程上。映射模型可以是1:1(原生线程模型)、n:1(绿色线程 / 用户态线程模型)、m:n(混合模型)。
以HotSpot VM的实现为例,它目前在大多数平台上都使用1:1模型,也就是每个Java线程都直接映射到一个OS线程上执行。此时,native方法就由原生平台直接执行,并不需要理会抽象的JVM层面上的“pc寄存器”概念——原生的CPU上真正的PC寄存器是怎样就是怎样。就像一个用C或C++写的多线程程序,它在线程切换的时候是怎样的,Java的native方法也就是怎样的。
语雀地址:https://www.yuque.com/yangxiaofei-vquku/wmp1zm/udvme7
JVM体系结构篇之JVM的整体结构相关推荐
- 【jvm】JVM体系
文章目录 1.JVM体系 2.JVM存储 3.概念 4.分代回收 1.JVM体系 2.JVM存储 假设1是JVM 2是栈内存 3是堆内存 A和str是存储在栈内存中的. 创建
- 我所知道JVM虚拟机之聊聊JVM虚拟机
一.介绍JVM跨语言的平台 随着Java7的正式发布,Java虚拟机的设计者们通过JSR-292规范基本实现在Java虚拟机平台上运行非Java语言编写的程序 ava虚拟机根本不关心运行在其内部的程序 ...
- JVM学习1:JVM和Java体系结构
JVM和Java体系结构 计算机本身是不识别高级语言的,这个大家应该都知道,我们的Java.C.Python这些代码都要执行下面的一个流程 随着Java7发布以后,Java虚拟机可以根据JSR-292 ...
- JVM学习~第一天~JVM简介
JVM简介 1)JVM跨语言的平台,Java跨平台的语言 2)JVM特点 3)JVM的位置 4)JVM的整体结构 5)Java代码执行流程 6)JVM架构模型 7)JVM的生命周期 1)JVM跨语言的 ...
- 深入理解JVM虚拟机2:JVM垃圾回收基本原理和算法
JVM GC基本原理与GC算法 Java的内存分配与回收全部由JVM垃圾回收进程自动完成.与C语言不同,Java开发者不需要自己编写代码实现垃圾回收.这是Java深受大家欢迎的众多特性之一,能够帮助程 ...
- jvm(Java virtual machine) JVM架构解释
2019独角兽企业重金招聘Python工程师标准>>> JVM 架构解释 每个Java开发者都知道通过JRE[Java运行环境]执行字节码. 但是很多人都不知道JRE是JVM实现的事 ...
- 深入详解JVM内存模型与JVM参数详细配置
本系列会持续更新. JVM基本是BAT面试必考的内容,今天我们先从JVM内存模型开启详解整个JVM系列,希望看完整个系列后,可以轻松通过BAT关于JVM的考核. BAT必考JVM系列专题 1.JVM内 ...
- 直通BAT必考题系列:深入详解JVM内存模型与JVM参数详细配置
JVM基本是BAT面试必考的内容,今天我们先从JVM内存模型开启详解整个JVM系列,希望看完整个系列后,可以轻松通过BAT关于JVM的考核. BAT必考JVM系列专题 1.JVM内存模型 2.JVM垃 ...
- 【JVM】第二章 JVM类加载、JVM对象
第二章 JVM类加载.JVM对象 文章目录 第二章 JVM类加载.JVM对象 一.JVM类加载 1.介绍 2.类加载器 3.类加载机制 4.类加载过程 二.JVM对象 1.对象的内存布局 2.对象的访 ...
最新文章
- 【蓝桥java】递归基础之输出连续数字
- linux服务器centos系统apache路径不区分大小写的解决办法(适用WDCP面板)
- 微软发布 Mobile Express for Microsoft Dynamics CRM 4.0
- android_secure写权限,android.permission.WRITE_SECURE_SETTINGS权限报错
- java hibernate更新_Hibernate更新某些字段的几种update方法
- Nali:一个离线查询 IP 地理信息和 CDN 提供商的终端利器
- android通知栏应用程序更新,Android App自动更新之通知栏下载
- Mac OS X Yosemite安装Hadoop 2.6记录
- Java集合(Collection)综述
- 从架构设计到系统实施-基于.NET 3.0的全新企业应用之基于WCF的系统服务
- 今日头条算法及技术架构分析
- 如何创作属于自己的NFT?
- python中confusion matrix_Confusion matrix理解
- 卖西瓜问题(Java经典编程案例)
- [MetalKit]32-Shadows-in-Metal-part-2阴影2
- 运用“孤独九剑”解决项目实际问题(三)
- 【jQuery】- form 表单 reset()方法不生效解决
- JAVA获取网页中的电影下载地址小程序
- python识别手写数字字体_基于tensorflow框架对手写字体MNIST数据集的识别
- git pull某单个文件