【JVM】——JVM运行机制、类加载机制、内存划分

news2024/10/28 14:13:33

 8e19eee2be5648b78d93fbff2488137b.png

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

目录

一:JVM引入

1:编程语言

2:JAVA运行机制

二:JVM中内存区域划分

1:堆

2:栈

(1)本地方法栈

(2)虚拟机栈

3:程序计数器

4:元数据区

三:JVM的类加载机制(重点 )

1:类加载

2:类加载过程

(1)加载

(2)验证

(3)准备

(4)解析

(5)初始化

3:双亲委派模型

(1)类加载器

(2)模型工作过程


一:JVM引入

IDEA运行代码离不开三个东西

JVM——Java虚拟机

JRE——Java运行时环境

JDK——Java开发工具包

③包含②,②包含①

1:编程语言

在计算机导论中,我们把编程语言可以分为:编译型语言和解释型语言(虽然现在不适用了)

编译型语言:将像JAVA或者C++这样的高级语言,转化为二进制的机器指令,最后由CPU进行执行

解释型语言:边转化二进制机器指令,CPU边执行

2:JAVA运行机制

Java属于“半编译,边解释”,目的是为了跨平台。我们知道不同的cpu,上面支持的指令格式并不一样。JAVA想要达到编译一遍,就能在多种CPU上执行。这里的过程简述如下

①通过javac把.java文件转化为.class文件

(.class文件就是字节码文件,包含的就是java字节码,可以理解成java自己搞的一套“CPU指令”)

②这个.class文件在某个具体的操纵系统上执行,此时JVM就会把.class文件转化为当前cpu能识别的机器指令。

(JVM相当于翻译官)

总结:我们编写和发布一个Java程序,只需发布一个.class文件就可以了,剩下的交给JVM(爹~!)

二:JVM中内存区域划分

JVM本身就是一个进程,在运行过程中就会向操作系统这里申请一些资源(内存),比如在Java中定义变量,就是jvm去申请内存空间

1:堆

代码中new出来的对象就是在堆里面;对象中持有的非静态成员变量也就是在堆里

2:栈

包含了方法的调用关系和局部变量

(1)本地方法栈

本地也就是jvm内部,通过c++写的代码中的一些调和关系和局部变量(关注较少)

(2)虚拟机栈

记录Java代码中(IDEA中)的调用关系和局部变量(一般说栈默认指虚拟机栈)

注:这里说的栈,和数据结构中的栈不是一回事

3:程序计数器

这个区域空间比较小,用来存储下一条要执行的java指令地址

4:元数据区

java1.8以前也叫“方法区”。我们写的代码,由javac转化为字节码,再由jvm把字节码加载到内存中放到元数据区(方法区)中,程序就按照元数据中记录的字节码依次执行

“元数据”(meta data)计算机术语,指的是一些辅助性性质的,描述性质的属性 

例如:类的信息,方法的信息,一个程序有哪些类,类里有哪些方法,方法中包含哪些指令

例如:文件大小、位置、拥有者、修改时间、

三:JVM的类加载机制(重点 )

1:类加载

指java进程运行时,把.class文件从硬盘读取到内存,并进行校验解析的过程

2:类加载过程

Java官方文档中有详细说明Java SE Specifications

(1)加载

找到硬盘上的.class文件,打开文件,读取文件内容(二进制数据)

(2)验证

确保读取到的数据内容是合法的.class文件(字节码文件)

①类型

c++中没有规定类型有多长,而是规定这个类型不能短于多长,所以程序员用typedef自己定义出一些类型,u4,u2就是在描述这个类型的长度

②magic

majic也叫做magic number 魔幻数字,广泛应用于二进制文件格式中,用来标识当前二进制文件的格式是哪种类型

③JVM内部的版本,高版本的JVM可以运行低版本的.class文件,反之不一定可以

 

④常量池

⑤针对类的修饰限定符只有public和default两种

⑥当前类的其它信息和父类息

⑦每一个元素就是一个field_info,描述每一个成员,属性的相关信息(属性的名字、类型,访问权限,)

 ⑧方法信息

⑨注解

(3)准备

给类对象申请内存空间,此时申请到的内存空间,里面的默认值都是0 

(4)解析

针对字符串常量进行处理——JVM将常量池中的符号引用替换为直接引用的过程,也就是初始化常量的过程

等.class文件被JVM加载到内存当中后,此时“hello”就有真实的地址了

(5)初始化

针对对象完成后续的初始化

3:双亲委派模型

双亲委派模型是处于加载环节中的,它描述的是如何查找.class文件

彩蛋:起“双亲”为名字,纯是为了好听,其实单亲更符合实际

(1)类加载器

在JVM中有一个专们进行类加载的模块——“类加载器”(ClassLoader)

默认的类加载器有三个:

①BootstrapClassLoader——负责查找标准库的目录

注:Java语法规范中描述了标准库中应该有哪些功能,像我们熟知的java.lang,java.util等就是标准库中的核心组件

②ExtensionClassLoader——负责查找扩展库的目录 

注:实现JVM的厂商/组织,会在标准库的基础上在扩展实现一些功能,这些功能就放在扩展库里

③ApplicationClassLoader——负责查找当前项目的代码目录和第三方库目录

注:上述三个类加载器,存在像二叉树里那种“父子关系”,有一个指针引用指向自己的“父亲”类加载器

(2)模型工作过程

①将ApplicationClassLoader作为入口进入,ApplicationClassLoader不会选择立刻在自己的目录开始搜寻,而是把任务交给自己的parent

②ExtensionClassLoader收到任务后,不会立刻搜索自己的目录,而是传给parent

③BootstrapClassLoader同样把任务甩给parent,但是发现parent是null,没有“父亲”

④所以只能自己搜寻了——尝试在标准库中搜寻符合要求的.class文件。如果找到了,就步入下一个验证环节;如果没找到就把任务返还孩子

⑤ExtensionClassLoader收到搜寻任务后同样再扩展目录中开始搜寻,如果找到了,就步入下一个验证环节;如果没找到就把任务返还孩子

⑥ApplicationClassLoader收到任务在当前项目代码目录和第三方库目录中找,如果找到了,就步入下一个验证环节;如果没找到就表示类加载失败抛出“ClassNotFoundException”异常

注:上述的规则,是JVM自带的类加载器默认遵循的规则。我们也可以自己写一个类加载器,打破上述规则(铁批表示规则就是用来打破的~~~)

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

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

相关文章

EVADC模块多路触发导致AD值波动

前言:最近开发中遇到一个问题,某一路ADC通道采集的AD值波动比较厉害,达到9个hex值波动,对此进行了分析排查...... 1 排除硬件因素 用示波器对电路图上该ADC通道的测试点进行电压测量,发现电压比较稳定,换算…

【计算机网络三】一篇文章详解TCP/IP四层协议簇

目录 TCP/IP四层协议簇 1.应用层 DNS NAT NAPT HTTP/HTTPS 2.传输层 TCP协议 UDP协议 3.网络层 IP协议 4.数据链路层 以太网 ARP协议 TCP/IP四层协议簇 TCP/IP四层协议簇是目前世界上最流行的网络协议分层方式,本篇文章我将带大家从上到下详解四层协议…

开放式蓝牙耳机哪个品牌好用?爆款开放式耳机推荐!

在当今蓝牙耳机市场中,开放式蓝牙耳机以其独特的设计和舒适的佩戴体验,逐渐成为众多消费者的新宠。然而,面对众多品牌和款式的开放式蓝牙耳机,消费者往往陷入选择的困境。究竟哪个品牌的开放式蓝牙耳机真正好用?其性能…

Python实现贝叶斯优化器(Bayes_opt)优化简单循环神经网络回归模型(SimpleRNN回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 贝叶斯优化器 (BayesianOptimization) 是一种黑盒子优化器,用来寻找最优参数。 贝叶斯…

C#使用开源库EasyModbusTCP跟PLC进行通讯开发步骤

使用C#进行非标自动化系统开发一般涉及的知识包含后台、前台、手持终端、客户端软件等功能模块的开发,其中后台程序连接数据库,而前台Vue界面,手持终端Android程序,客户端C#软件都会跟后台接口程序进行数据交换。 本文主要讨论C#客…

基于知识图谱的紧急事故决策辅助系统

现代社会紧急事故频发,而处理这些突发事件的效率直接决定了后续影响的大小。这时候,数据智能的解决方案会显得尤为重要!今天为大家分享一个用【知识图谱】技术驱动的紧急事故决策辅助系统,不仅能帮助你快速处理事故信息&#xff0…

当有违法数据时,浏览器不解析,返回了undefined,导致数据不解析

现象:页面上没有看到数据 排查:断点到线上的源码里:1、协议回调确实没有拿到数据是个undefined 2、network里看服务确实响应了数据 3、控制台没有任何报错。 心情:莫名其妙的现象 我本地有json格式化工具,copy进去后&…

STM32硬件平台

STM32 系列是 STMicroelectronics 设计的高度灵活、广泛应用的微控制器(MCU)系列,支持从低功耗应用到高性能处理的需求,适用于工业、汽车、消费电子和物联网等广泛领域。STM32 系列具有广泛的硬件种类和丰富的功能,以下…

uniapp 引入了uview-ui后,打包错误,主包过大解决方案

原因:由于使用uniapp来设计小程序,使用uview的组件库,导致了主包过大,无法打包 前提条件:已经完成了分包,如果还没有分包的先分包,需要上传代码时用到 1. 通常情况,大多数都是通过点…

VUE3实现古典音乐网站源码模板

文章目录 1.设计来源1.1 网站首页页面1.2 古典音乐页面1.3 著名人物页面1.4 古典乐器页面1.5 历史起源页面1.6 登录页面1.7 注册页面 2.效果和源码2.1 动态效果2.2 目录结构 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xc…

MIT 6.824 Lab1记录

MapReduce论文阅读 1. 编程模型 Map 函数(kv -> kv) Map 函数将输入的键值对处理为一系列中间值(键值对),并将所有的中间结果传递给 Reduce 处理。 map(String key, String value):// key: document name// val…

PHP员工管理系统小程序

💼高效管理,从“员工管理系统”开始💼 📋【一键录入,信息整合】📋 你是否还在为整理员工信息而手忙脚乱?纸质档案易丢失、电子表格易混乱,这些问题在“员工管理系统”面前都将迎刃…

如何使用ssm实现电商扶贫平台网站

TOC 10929ssm电商扶贫平台网站 第1章 绪论 1.1背景及意义 系统管理也都将通过计算机进行整体智能化操作,对于电商扶贫平台网站 所牵扯的管理及数据保存都是非常多的,例如管理员;首页、个人中心、商品分类管理、热门商品管理、用户管理、系…

Android 应用申请 Google MBA权限

​ Google Case链接:89 > 34810 > 30025 > 155353 > Handheld > MBA Policies 按照指引填写模板 This bug is for the approval of MBAs under [13.2.2 Pregrant permissions policy](https://docs.partner.android.com/gms/policies/domains/mba#m…

DS3231时钟芯片全解析——概况,性能,MCU连接,样例代码

DS3231概述: 数据: DS3231是一个超高精度I2C实时时钟芯片,带有集成的温度补偿晶振。误差范围:温度范围为0摄氏度到40摄氏度(2PPM),温度范围为-40摄氏度到85摄氏度(3.5PPM&#xff0c…

栈和队列-栈的练习题

1. 逆波兰表达式 题目: 给出一个算数式的后缀表达式,我们来求他最后算数值. 在解题之前我们来认识一下中缀表达式,和后缀表达式(逆波兰表达式 我们在写数学遇到的那种形式的算数表达式就是中缀表达式,我们要从中缀表达式变为后缀表达式(逆波兰式),计算机时不知道式子的计算…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-25

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-25 0. 前言 大语言模型在很多领域都有成功的应用,在本期计算机前沿技术进展研究介绍中,我们将带来一篇用大语言模型进行诺贝尔文学作品分析的论文。虽然有一定趁最近诺贝尔奖热潮的意味&…

现代数字信号处理I-极大似然估计 学习笔记

目录 1. 极大似然估计的模型介绍 2. 极大似然估计可以达到CRLB的说明 2.1 前期准备:符号定义及说明 2.2 中心极限定理 2.3 大数定理 2.4 说明思路 2.5 具体过程 说明:此部分内容在2024版本的课程中没有提供,需要参考2023之前的课程&…

R语言笔记(五):Apply函数

文章目录 一、Apply Family二、apply(): rows or columns of a matrix or data frame三、Applying a custom function四、Applying a custom function "on-the-fly"五、Applying a function that takes extra arguments六、Whats the return argument?七、Optimized…

基于贝叶斯优化的K折交叉验证BP回归模型(可预测未来数据)

基于贝叶斯优化的K折交叉验证BP回归模型(可预测未来数据) 目录 基于贝叶斯优化的K折交叉验证BP回归模型(可预测未来数据)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于贝叶斯优化的K折交叉验证BP回归模型的多输入单一输出回归模型 Matlab版本:2020a及以…