JVM源码解析

news2024/11/7 19:15:51

一、java虚拟机概述

1. java程序的跨平台性

之前的话,通过Linux或者Windows开发,当需要跨平台时,程序不能运行。java出现后,产生了jvm,针对不同的操作系统,产生了不同的java虚拟机。

在Java虚拟机中执行的指令,称为Java字节码指令。

下面显示了同一个Java程序,被编译为一组Java字节码的集合之后,可以通过Java虚拟机运行于不同的操作系统上,它以Java虚拟机为中介,实现了跨平台的特性。

2. JVM的基本结构

类加载子系统:java文件先被编译成class文件,类加载子系统(classLoader)加载class文件,在jvm层面,就会涉及类加载里的加载、验证、准备、解析、初始化五个步骤,实现类的加载行为。当class文件被加载完,就会进入JMM。

JMM:java 内存模型,包括:公有的方法区、java堆私有的java栈、本地方法栈、PC寄存器

两个线程同时请求一个路径,请求的资源可以互通认为是公有的,反之为私有的。

栈对应的是方法,java栈是自己本地写的方法,本地方法栈是native方法,私有则意味着两个线程互不打扰,A线程运行到一个位置,此时B线程进来了,私有则意味着B要从头运行。

class文件经过五个步骤加载完成后,类信息保存到方法区中,对象调用之后才会用到JMM另外四个位置。

垃圾回收系统:失去引用的对象为垃圾对象。包括:垃圾回收算法和垃圾回收器。

执行引擎:负责虚拟机的字节码。(忽略)

3. JVM类加载流程和内存结构总览

4. 类加载——加载阶段

通过类的全路径名称,读取类的二进制数据流。解析类的二进制数据流,转化为方法区(永久代or元空间)内部的数据结构。创建java.lang.Class类的实例对象,表示该类型。

5. 类加载——验 证 阶 段

它的目的是保证第一步中加载的字节码 是合法且符合规范的。 大体分为4步验证:

格式检查:检查魔数、版本、长度等等。

语义检查:抽象方法是否有实现类、 是否继承了final类等等编码语义上的 错误检查。

字节码验证:跳转指令是否指向正确的位置,操作数类型是否合理等。

符号引用验证:符号引用的直接引用是否存在。

6. 类加载——准 备 阶 段

准备阶段是正式为类变量分配内存并设置类 变量的初始值阶段,即:在方法区中分配这些变量所使用的内存空间。

注意这里所说的初始值概念,比如一个类变 量定义为:public static int v = 8080; 实际上变量v在准备阶段过后的初始值为0而不是 8080,将v赋值为8080的put static指令是程 序被编译后,存放于类构造器方法之中。

但是注意,如果声明为:public static final int v = 8080; 在编译阶段会为v生成 ConstantValue属性,在准备阶段虚拟机会根 据ConstantValue属性将v赋值为8080。

7. 类加载——解 析 阶 段

解析阶段是指虚拟机将运行时常量池中的符号引用替换为直接引用的过程。

符号引用就是class文件中的:CONSTANT_Class_info、CONSTANT_Field_info、 CONSTANT_Method_info 等类型的常量。

8. 类加载——初 始 化 阶 段

到达这个阶段,类就可以顺利加载到系统中。此时,类才会开始执行Java字节码。初始化阶段是执行类构造器方法的过程。

方法是由编译器自动收集类中的类变量的赋值操作和静态语句块中的语句合并而成的。虚拟机会保证子方法执行之前,父类的方法已经执行完毕,如果一 个类中没有对静态变量赋值也没有静态语句块,那么编译器可以不为这个类生成() 方法。

二、java虚拟机内存模型

1. 程序计数器

三、

四、

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2130214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3D云渲染农场为何怎么贵?主要消耗成本介绍

随着对高质量3D动画的需求持续增长,云渲染农场对于旨在以高效速度生产高质量视觉效果的工作室来说变得至关重要。然而,用户经常想知道为什么渲染农场的价格如此之高,理解背后的原因可以帮助艺术家做出更好的选择。 什么是云渲染农场&#xff…

【Hot100】LeetCode—72. 编辑距离

目录 1- 思路题目识别动规五部曲 2- 实现⭐72. 编辑距离——题解思路 3- ACM 实现 原题链接:72. 编辑距离 1- 思路 题目识别 识别1 :两个字符串之间相互转换,增、删、替换 最少的操作次数 动规五部曲 1- 定义 dp 数组 dp[i][j] 代表&…

市面上有哪些高效财税自动化软件

随着科技的不断发展,财税自动化软件已成为许多企业和个人不可或缺的工具。这些软件可以大大提高财税处理的效率,减少人工错误,并确保合规性。目前市场上有许多高效财税自动化软件可供选择,本文金智维将介绍一些市场上比较受欢迎的…

可信的人类与人工智能协作:基于人类反馈和物理知识的安全自主驾驶强化学习

可信的人类与人工智能协作:基于人类反馈和物理知识的安全自主驾驶强化学习 Abstract 在自动驾驶领域,开发安全且可信赖的自动驾驶策略仍然是一项重大挑战。近年来,结合人类反馈的强化学习(RLHF)因其提升训练安全性和…

【EI会议征稿通知】第五届机械、电子电气与自动化控制国际学术会议(METMS 2025)

第五届机械、电子电气与自动化控制国际学术会议(METMS 2025) 2025 5th International Conference on Mechanical, Electronics and Electrical and Automation Control 随着全球技术进步与工业需求的不断升级,机械、电子电气和自动化控制技…

网络安全实训九(域环境的创建及其信息收集)

1 创建域环境 1.1 在WindowsServer2008上添加域服务 1.2 安装成功 1.3 选择蓝色字体:运行Active Directory域服务安装向导(dcpromo.exe) 1.4 记住新建的林,在安装的时候点击下一步即可 1.5 完成安装 1.6 在windows7上加入域,点击网络ID 1.7 …

力扣题解2576

大家好,欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述: 给你一个下标从 0 开始的整数数组 nums 。 一开始,所有下标都没有被标记。你可以执行以下操作任意次: 选择两个 互不相同且未标记 的下标 i 和 j &am…

SprinBoot+Vue民宿预约微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…

[羊城杯 2020]Blackcat1

知识点:数组加密绕过 进入页面熟悉的web三部曲(url地址,web源代码,web目录扫描) url地址没有什么东西去看看源代码. 这有一个mp3文件点一下看看. 在最后面发现了 PHP源码. if(empty($_POST[Black-Cat-Sheriff]) || em…

Deep Learning-Based Object Pose Estimation:A Comprehensive Survey

论文:https://arxiv.org/pdf/2405.07801v3 项目:https://github.com/CNJianLiu/Awesome-Object-Pose-Estimation 年份:2024 方向:姿态估计 1. 目标姿态估计定义 估计图像中目标相对于相机的姿态, 目标姿态估计是增…

【网络安全】服务基础第二阶段——第五节:Linux系统管理基础----Linux常见应用服务(Apache、数据库)

在Linux系统中,有许多常见的应用服务,它们用于执行各种任务,如网页托管、数据库管理、文件传输等。 Apache HTTP Server:用于托管网站和Web应用程序的Web服务器。Nginx:高性能的Web服务器和反向代理服务器&#xff0c…

11Python的Pandas:可视化

Pandas本身并没有直接的可视化功能,但它与其他Python库(如Matplotlib和Seaborn)无缝集成,允许你快速创建各种图表和可视化。这里是一些使用Pandas数据进行可视化的常见方法: 1. 使用Matplotlib Pandas中的plot()方法…

YoloV10改进策略:BackBone改进|注意力改进|HCANet全局与局部的注意力模块CAFM|二次创新|即插即用

摘要 在CAFM模型的基础上进行二次创新,我成功地开发了一个性能显著提升的改进版模型。这一创新不仅优化了特征提取和融合的方式,还极大地提高了模型的泛化能力和准确性。为了验证其有效性,我们将这一改进应用于流行的目标检测算法YoloV10,并取得了显著的精度提升。这一改进…

【笔记】二维DP

文章目录 例题lanqiao1536数字三角形题目描述输入描述输出描述解题思路选取状态1代码1选取状态2代码2 lanqiao 389摆花题目描述输入描述解题思路输出描述代码 lanqiao3711选数异或题目描述输入描述输出描述解题思路 lanqiao3348可构造的序列总数 二维DP和普通DP本质相同&#x…

ios 用JXCategoryView 库实现tab滑动切换viewController

先Pod导入安装 pod JXCategoryView.m文件 // // OrderViewController.m // scxhgh2 // // Created by xmkjsoft on 2024/9/9. //#import "OrderViewController.h" #import "NavigationBarUtils.h" #import <JXCategoryView/JXCategoryView.h>#im…

《深度学习》深度学习 框架、动态展示即推导

目录 一、深度学习 1、什么是深度学习 2、特点 3、神经网络构造 1&#xff09;单层神经元 • 推导 • 示例 2&#xff09;多层神经网络 3&#xff09;小结 4、感知器 神经网络的本质 5、多层感知器 6、动态图像示例 1&#xff09;一个神经元 相当于下列状态&…

Redis入门 - C#|.NET Core封装Nuget包

经过前面章节的学习&#xff0c;可以说大家已经算Redis开发入门了。已经可以去到项目上磨砺了。 但是今天我还想和大家分享一章&#xff1a;封装自己的Redis C#库&#xff0c;然后打包成Nuget包。 首先要说明的是&#xff1a;不是要自己开发一个Redis客户端库&#xff0c;而是…

【Linux】Linux常见指令以及权限理解(下)

【Linux】Linux常见指令以及权限理解&#xff08;下&#xff09; &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;Linux&#x1f34a; &#x1f33c;文章目录&#x1f33c; 3. Linux下基本指令 3.9 mv 指令&#xff08;重点&#xff0…

借助ChatGPT撰写学术论文的10条规则

在撰写学术论文时,利用ChatGPT等人工智能工具可以显著提高写作效率和质量。以下是结合ChatGPT功能,为构建学术论文提出的10条规则,包括详细的专业说明和格式化的GPT提示词。 规则1:明确论文目标与核心问题 专业说明:确定研究的核心问题和目标是撰写论文的第一步。这有助…

如何通过可视化大屏,助力智慧城市的“城市微脑”建设?

在智慧城市的宏伟蓝图中&#xff0c;常常面临着一个关键挑战&#xff1a;如何确保这些理念和技术能够真正地惠及城市的每一个角落&#xff0c;每一个产业&#xff0c;以及每一位市民。问题的核心在于城市的具体应用场景&#xff0c;无论是横向的社区、园区、镇街、学校、酒店、…