Java Virtual Machine

news2025/1/12 17:43:31

JVM

1、初始 JVM

简单描述一下 JVM :JVM 本质是一个运行在计算机上的程序,它的职责是运行字节码文件。

JVM 的三大功能:

  • 解释和运行:对字节码文件中的指令,实时的解释成机器码,让计算机执行
  • 内存管理:自动为对象、方法等分配内存;自动回收不再使用的对象
  • 即时编译:对热点代码优化,提升执行的效率

JVM 的组成:

  • 类加载器:加载 class 字节码文件到内存中
  • 运行时数据区域(JVM 管理的内存):负责管理 JVM 使用到的内存,也就是 Java 的运行时数据区域
  • 执行引擎(即时编译器、垃圾回收器、解释器等):将字节码文件中的指令解释成机器码,同时使用即时编译器提高性能

2、认识字节码文件的组成

  • 一般信息:魔术、字节码文件对应的 Java 版本号、访问标识、父类和接口
  • 常量池:字符串常量池、类和接口名、
  • 字段:当前类或接口声明的字段信息
  • 方法:当前类或接口声明的方法信息
  • 属性:类的属性,比如源码的文件名,内部类的列表等

如何查看字节码文件:

1、本地文件可以使用jclasslib工具查看,开发环境使用jclasslib插件。

2、服务器上文件使用javap命令直接查看,也可以通过arthas的dump命令导 出字节码文件再查看本地文件。还可以使用jad命令反编译出源代码。、

3、类的生命周期

类的生命周期:加载、连接(包含验证、准备、解析)、初始化、使用、销毁

加载

类加载器根据类的全限定名通过不同的渠道以二进制流的方式获取字节码信息,不同的渠道包括本地字节码文件、网络传输的类、动态代理生成的类

类加载器在加载完类之后,Java虚拟机会将字节码中的信息保存到方法区中。

类加载器在加载完类之后,Java虚拟机会将字节码中的信息保存到内存的方法区中。 生成一个InstanceKlass对象,保存类的所有信息,里边还包含实现特定功能比如多态的信息。

同时,Java虚拟机还会在堆中生成一份与方法区中数据类似的java.lang.Class对象。

对于开发者来说,只需要访问堆中的Class对象而不需要访问方法区中所有信息。 这样Java虚拟机就能很好地控制开发者访问数据的范围。

连接

验证:验证内容是否满足《Java虚拟 机规范》

准备:给静态变量赋零值,final 修饰的静态变量赋初值

解析:将常量池中的符号引用替换成指向内 存的直接引用

初始化

初始化阶段会执行静态代码块中的代码,并为静态变量赋值。

初始化阶段会执行字节码文件中clinit部分的字节码指令。

4、类加载器

自顶向下分别是:

C++ 实现的启动类加载器 Bootstrap

Java 实现的扩展类加载器 Extension

Java 实现的应用程序类加载器 Application

Java 中如何使用代码主动去加载一个类?:

使用 Class.forName() 方法,使用当前类的类加载器去加载一个类

获取类加载器,通过类加载器的 loadClass 方法指定某个类加载器加载:

在这里插入图片描述

双亲委派机制:

在这里插入图片描述

如何打破?:

在这里插入图片描述

5、Java 内存区域

参考这篇文章:https://blog.csdn.net/m0_64201189/article/details/136435783?spm=1001.2014.3001.5501

主页:https://blog.csdn.net/m0_64201189

5、垃圾回收

参考文章:https://blog.csdn.net/m0_64201189/article/details/136416748?spm=1001.2014.3001.5501

补充一下 G1 回收器:

tps://blog.csdn.net/m0_64201189/article/details/136416748?spm=1001.2014.3001.5501

补充一下 G1 回收器:

在这里插入图片描述

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

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

相关文章

webpack5零基础入门-10babel的使用

Babel JavaScript 编译器。 主要用于将 ES6 语法编写的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中 1.安装相关包 npm install -D babel-loader babel/core babel/preset-env 2.进行相关配置 2.1第一种写法是在webp…

【C语言入门】浮点型数据在内存中的存储

✨✨欢迎大家来到Celia的博客✨✨ 🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉 所属专栏:C语言 个人主页:Celias blog~ 目录 ​编辑 引言 引例 一、浮点型在内存中的存储方式 1.1 …

Employing Multi-Estimations for Weakly-Supervised Semantic Segmentation

eighted selective training (WST) 辅助信息 作者未提供代码

Vue+SpringBoot打造婚恋交友网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 会员管理模块2.3 新闻管理模块2.4 相亲大会管理模块2.5 留言管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 会员信息表3.2.2 新闻表3.2.3 相亲大会表3.2.4 留言表 四、系统展示五、核心代码5.…

解决分布式事务,Seata真香!

年IT寒冬,大厂都裁员或者准备裁员,作为开猿节流主要目标之一,我们更应该时刻保持竞争力。为了抱团取暖,林老师开通了《知识星球》,并邀请我阿里、快手、腾讯等的朋友加入,分享八股文、项目经验、管理经验等…

模型、算法、数据模型、模型结构是什么?它们之间有什么关联和区别?

模型、算法、数据模型、模型结构是什么?它们之间有什么关联和区别? 导读一、算法1、算法定义2、机器学习算法定义 二、模型1、模型定义2、数据模型定义3、机器学习模型定义 三、模型结构1、线性模型2、基于实例的模型3、决策树模型4、支持向量机5、集成方…

WebRTC:真正了解 RTP 和 RTCP

介绍 近年来,通过互联网进行实时通信变得越来越流行,而 WebRTC 已成为通过网络实现实时通信的领先技术之一。WebRTC 使用多种协议,包括实时传输协议 (RTP) 和实时控制协议 (RTCP)。 RTP负责通过网络传输音频和视频数据,而RTCP负责…

网络原理(2)——TCP协议

目录 一、TCP协议段格式 二、确认应答 三、超时重传 TCP全称为:"传输控制协议 Transmission Control Protocol)"。协议如其名,要对数据的传输进行一个详细的控制。 一、TCP协议段格式 源 / 目的端口号:表示数据从哪个进程来&am…

稀碎从零算法笔记Day20-LeetCode:回文链表

题型:链表、双指针 链接:206. 反转链表 - 力扣(LeetCode) 234. 回文链表 - 力扣(LeetCode) 来源:LeetCode 题目描述(红字为笔者添加) 给你一个单链表的头节点 head &…

.rmallox勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言: 近年来,勒索病毒的威胁日益增加,其中一种名为.rmallox的勒索病毒备受关注。这种病毒通过加密文件并勒索赎金来威胁受害者。本文将介绍.rmallox勒索病毒的特点,以及如何恢复被其加密的数据文件,并提供预防措施&a…

三、传输层拥塞控制、差错控制

3.1 概述和传输层服务 传输服务和协议: 为运行在不同主机上的应用进程提供逻辑通信; 传输协议运行在端系统-发送方:将应用层的报文分成报文段,然后传递给网络层;接收方:将报文段重组成报文,然后传递给应用…

【C#图解教程】笔记

文章目录 1. C#和.NET框架.NET框架的组成.NET框架的特点CLRCLICLI的重要组成部分各种缩写 2. C#编程概括标识符命名规则: 多重标记和值格式化数字字符串对齐说明符格式字段标准数字格式说明符标准数字格式说明符 表 3. 类型、存储和变量数据成员和函数成员预定义类型…

【图论】计算图的n-hop邻居个数,并绘制频率分布直方图

计算图的n-hop邻居个数,并绘制频率分布直方图 在图论中,n-hop邻居(或称为K-hop邻居)是指从某个顶点出发,通过最短路径(即最少的边数)可以到达的所有顶点的集合,其中n(或…

git如何回退版本reset和revert命令的区别

文章目录 git回退版本的方法使用reset回退使用revert回退 总结 git回退版本的方法 Git回退到某个版本有两种方法&#xff1a;reset和revert。 使用reset回退 git reset --hard <版本号>该命令将HEAD指针移动到指定的版本&#xff0c;并重置工作目录和暂存区的内容。这…

Vue-router3.0版本跳转报错

1.路由创建之后发现控制台push路由跳转报错了 2.解决方法&#xff1a; //在router文件中添加 const originalPush VueRouter.prototype.push VueRouter.prototype.push function push(location) {return originalPush.call(this, location).catch(err > err) }3.解决了

基于单片机的DDS函数信号发生器

单片机DDS函数信号发生器设计 该设计以AT89S52为主控芯片&#xff0c;通过控制高性能DDS&#xff08;直接数字频率合成&#xff09;芯片AD9834产生不同频率的信号&#xff0c;经过6阶巴特沃兹低通滤波电路&#xff0c;连接数字电位器的运算放大电路&#xff0c;输出信号。可以…

P2036 [COCI2008-2009 #2] PERKET

题目描述 Perket 是一种流行的美食。为了做好 Perket&#xff0c;厨师必须谨慎选择食材&#xff0c;以在保持传统风味的同时尽可能获得最全面的味道。你有 &#xfffd;n 种可支配的配料。对于每一种配料&#xff0c;我们知道它们各自的酸度 &#xfffd;s 和苦度 &#xfffd…

安装Pytorch——CPU版本

安装Pytorch——CPU版本 1. 打开pytorch官网2. 选择pip安装pytorch-cpu3.复制安装命令4. 在cmd命令窗口&#xff0c;进入你的虚拟环境4.1 创建虚拟环境4.2 进行安装 5. 安装成功6. 进行测试——如下面步骤&#xff0c;如图6.1 输入 python6.2 输入 import torch6.2 输入 print …

Spring Boot中application配置文件的生效顺序

Spring Boot的一个重要特性就是它的自动配置&#xff0c;这一特性在很大程度上依赖于名称为application的配置文件。本文将详细介绍在Spring Boot中&#xff0c;这些配置文件的加载顺序以及每份文件的应用范围。 文章目录 配置文件的种类配置文件的加载顺序配置文件的环境切换 …

kubernetes学习总结

kubernetes学习大纲 kubernetes的发展历程 Kubernetes的组件和架构 Kubernetes API对象基本组成 Kubernetes中的yml详解1 Kubernetes中的yml详解2 Deployment与Service