没有合适的资源?快使用搜索试试~ 我知道了~
首页深入理解JVM:程序虚拟机详解与Java应用优化
深入理解JVM:程序虚拟机详解与Java应用优化
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 156 浏览量
更新于2024-07-02
收藏 2.07MB DOCX 举报
本文档深入介绍了JVM(Java Virtual Machine,Java虚拟机)在程序运行中的作用和特性。首先,文章定义了虚拟机的两种类型:系统(硬件)虚拟机和程序(软件)虚拟机,其中JVM属于后者,它是一个在操作系统上运行特定程序的平台,主要负责执行Java字节码。 JVM的核心是它的跨语言特性,允许任何语言通过编译器生成符合JVM规范的字节码来运行,实现了“一次编译,到处运行”的理念。这使得Java具有平台无关性,开发者无需关心底层硬件和操作系统细节,专注于编写业务逻辑。 然而,尽管JVM提供了自动内存管理和垃圾回收的功能,但这种抽象也带来了一些性能上的妥协。随着程序规模的扩大和复杂性的增加,JVM的性能可能会受到限制,因为它是通过虚拟化机制来提供统一的运行环境。了解JVM的工作原理有助于优化代码,提高程序的性能,同时也能解决内存溢出等问题。 文章还概述了Java运行的基本流程,包括源码编译为字节码,字节码被类加载器加载和执行的过程。这部分通过图形示意图的形式清晰展示了JVM的内部操作,如类加载、字节码验证和数据交互等关键步骤。 学习JVM的主要目的是为了掌握底层原理,以便更好地利用JVM的优势,避免不必要的性能损失,并在遇到问题时能够迅速定位和解决。因此,对于Java开发者来说,理解JVM的运行机制是提升编程技能和维护高效代码的关键。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/85815331/bgb.jpg)
2、加载(Loading)
(1)目的:
加载 class 二进制字节流文件到内存中。
(2)步骤:
Step1 :使用类加载器 通过一个类的全限定名 去获取此类的 二进制字节流(获
取方式开放)。
Step2 :将字节流 对应的静态存储结构 转为 方法区 运行时的数据结构。
Step3 :在内存中生成一个代表这个类的 java.lang.Class 对象,作为方法区中
这个类的各种数据访问的外部入口(HotSpot 中,该 Class 对象存放于方法区
中)。
(3 )获取 class 二进制字节流方式(简单列举几个)
Type1:从本地系统直接加载。
Type2 :从网络中加载(比如: Applet)。
Type3 :从 zip 压缩包中读取(jar、war 包等)。
Type4:运行时计算生成(动态代理技术)。
Type5:从数据库中读取(比较少见)。
Type6:从其他文件中读取(JSP 文件生成对应的 Class 类)。
3、连接(Linking)-- 验证(Verication)
(1)目的:
确保 class 文件的二进制字节流中包含的信息符合当前虚拟机的要求,保证数
![](https://csdnimg.cn/release/download_crawler_static/85815331/bgc.jpg)
据的正确性 而不会影响虚拟机自身的安全(比如:通过某种方式修改了 class
文件,若不去验证字节流是否符合格式,则可能导致虚拟机载入错误字节流而
崩溃)。
注:
验证阶段非常重要但不一定必要,如果代码是经过反复使用、验证过后并没有
出现问题,可以考虑将验证关闭(-Xverify:none),从而缩短类加载时间。
(2)验证方式:
“ 具体细节自行查阅相关文档、书籍,此处来源于 深入理解 JAVA 虚拟机 第二
”版 周志明 著 。
Step1:文件格式验证
验证字节流是否符合 class 文件格式规范,并能够被当前虚拟机处理。
比如:class 文件要以 CAFEBABE 开头
Step2:元数据验证
对类的 元数据 信息进行语义校验,验证当前数据是否符合 Java 语言规范。
比如:类是否存在父类、是否继承了 final 修饰的类等。
Step3:字节码验证
对类的方法体进行语义校验。
比如:方法体中类型的转换是否有效。
Step4:符号引用验证。
对常量池中各符号引用进行匹配性校验(一般发生在 解析阶段)。
比如:符号引用中通过字符串描述的全限定名能否找到对应的类。
注:
文件格式验证 是 基于 二进制字节流 进行的,通过验证后,会将数据存入 内存
的方法区。后续三种验证均是对方法区数据进行操作。
4、连接(Linking)-- 准备(Preparation)
(1)目的:
为类变量分配内存并设置类变量的默认初始值为 零值(比如:int 为 0 ,
boolean 为 false)。
注:
此处的类变量是 static 修饰的变量,但不包含 final static 修饰的变量。
final static 修饰的即为常量,在编译时就已经设置好了,在 准备阶段
(preparation)会赋值。
static 修饰的变量在 准备阶段赋零值,在 初始化阶段(Initialization)执行真正
赋值操作。
非 static 修饰的变量为 实例变量,随着对象分配到 堆中,并非存在于方法区中。
![](https://csdnimg.cn/release/download_crawler_static/85815331/bgd.jpg)
【举例:】
public static int value = 123;
此时 value 属于类变量,准备阶段 value = 0,初始化阶段 value = 123.
public static final int value = 123;
此时 value 属于常量,准备阶段 value = 123.
(2)零值
数据类型 零值
int 0
long 0L
short (short)0
byte (byte)0
char '\u0000'
float 0.0f
double 0.0d
boolean false
reference null
5、连接(Linking)-- 解析(Resolution)
(1)目的:
将常量池中的 符号引用 转换为 直接引用。
注:
符号引用(Symbolic References):指用一组符号(字面量)来描述所引用的
目标,但引用目标并不一定加载到了内存中。字面量形式明确定义在 Java 虚
拟机规范的 Class 文件格式中。
直接引用(Direct References ):指直接指向目标的指针 或 能间接定位到目标
的句柄,引用目标一定存在于内存中。
(2)解析动作
解析动作主要针对 类或接口、字段、类方法、接口方法、方法类型、方法句柄、
调用点限定符 这 7 类符号引用(具体解析过程此处略过,自行查阅文档、书
籍)。
剩余63页未读,继续阅读
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/ac8b9680820940e7ac9d0c7be554f725_weixin_44609920.jpg!1)
小兔子平安
- 粉丝: 242
- 资源: 1940
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 岩石滑动与断层冲击地压:声发射特征分析
- 新时代煤炭工业八大战略新取向剖析
- 开采强度对华亭矿区冲击地压危险性的影响分析
- 新安煤矿探采对比:影响安全生产的关键因素与技术支撑
- 210MW循环流化床锅炉引风机变频改造优化与节能效果
- 浅埋煤层开采沉陷预测:方法应用与影响分析
- 优化巷道过陷落柱支护方案:数值模拟与现场试验
- 坚硬顶板定向断裂爆破技术:安全高效采煤新方案
- 北航2019算法课作业解析:投资策略与凸子多边形优化
- 断层破碎带垮冒下堆积体边界抗力分布关键影响因素
- 哈拉沟选煤厂优化末煤系统提高效率与处理能力
- 瓦斯涌出影响下采动煤体蠕变失稳研究
- 提升煤矿装载效率的可控箕斗定量装载设备设计
- 水分调控下烟煤瓦斯吸附特性对比研究
- 重介质悬浮液密度控制硬件设计与选型探讨
- 坚硬顶板巷道支护参数设计:现场测试与数值分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)