JVM 类加载机制

JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程。

加载
加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的
java.lang.class 对象,作为方区这个类的各种数据的入口,注意这里不一定非得要
从一个class文件获取,这里既可以从zip 包中读出(比如从 jar 包),也可以由其它文件
生成(比如将JSP文件 转换成对应的Class类)

验证
这一阶段的主要目的是为保证Class文件的字节流包含的信息是否符合当前虚拟机的要求
,并且不会危害虚拟自身的安全

准备
准备阶段是正式为类变量分配内存并设置类变量的初始值阶段,既在方法区中分配这些变量
所使用的内存空间,注意这里所说的初始值概念,比如一个类变量定义为:

public static int v=80;
准备阶段后初始值 为0 而不是80


解析
解析阶段将类中的符号引用转换为直接引用,即将类、方法和字段的引用解析为内存地址

初始化
初始化阶段是类加载最后一个阶段,前面的类加载阶段之后,除了在加载阶段可以自定义类加载器以外,其它操作都由 JVM 主导。到了初始阶段,才开始真正执行类中定义的 Java 程序代码。
初始化阶段是执行类构造器方法的过程。方法是由编译器自动收集类中的类变量的赋值操作和静态语句块中的语句合并而成的。虚拟机会保证子方法执行之前,父类的方法已经执行完毕,如果一个类中没有对静态变量赋值也没有静态语句块,那么编译器可以不为这个类生成()方法。

注意以下几种情况不会执行类初始化:

1. 通过子类引用父类的静态字段,只会触发父类的初始化,而不会触发子类的初始化。

2. 定义对象数组,不会触发该类的初始化。

3. 常量在编译期间会存入调用类的常量池中,本质上并没有直接引用定义常量的类,不会触发定义常量所在的类。

4. 通过类名获取 Class 对象,不会触发类的初始化。

5. 通过 Class.forName 加载指定类时,如果指定参数 initialize 为 false 时,也不会触发类初始化,其实这个参数是告诉虚拟机,是否要对类进行初始化。

6. 通过 ClassLoader 默认的 loadClass 方法,也不会触发初始化动作。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QX----mini51单片机学习---(7)矩阵键盘

目录 1矩阵键盘的识别 2相关c语言 3实践编程 1矩阵键盘的识别 假设按列扫描按下S6P30:0P34:1然后高流向低,P34:0,刚开始是0xf0:1111 0000 后面是0xe0:1110 0000 ,当是0xe0能确…

了解 Swagger 中 allOf 的最佳实践

Swagger 提供了一个名为 allOf 的特性,它是通过扩展已有的数据模型来构造更为复杂的数据结构的有效手段。这一特性主要用于数据模型的继承及属性的组合,有效减少了代码重复,同时增强了代码的可维护性与清晰度。访问 Swagger 官方网站可以获得…

合专家模型 (MoE) 详解

本文转载自:混合专家模型 (MoE) 详解 https://huggingface.co/blog/zh/moe 英文版:https://huggingface.co/blog/moe 文章目录 一、简短总结二、什么是混合专家模型?三、混合专家模型简史四、什么是稀疏性?五、混合专家模型中令牌的负载均衡…

简洁大气APP下载单页源码

源码介绍 简洁大气APP下载单页源码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面 效果截图 源码下载 简洁大气APP下载单页源码

Hive Transaction事务表(含实现原理)

Hive Transaction事务表 在Hive中,事务表(Transactional Tables)允许用户执行事务性操作,包括ACID(原子性、一致性、隔离性、持久性)特性。事务表是在Hive 0.14版本引入的,并且在后续版本中不断…

【本地部署及云化部署】

文章目录 本地部署及云化部署介绍 文章目录 文章目录一、本地部署模式二、云化部署模式总结 一、本地部署模式 需建设专业化机房,系统应用、前端软件全部安装到本地服务器上。需要专业的IT、网络安全、DBA、电气化工程师进行维护。近些年勒索病毒安全事件频发&am…

Q1季度破壁机家电线上市场现状分析:静音降噪仍是主要购买需求

随着生活水平的提高和居民收入提升,破壁机作为日常食品加工的厨卫小家电逐渐受到关注。 而今年Q1季度,线上破壁机市场发展不如预期。根据鲸参谋数据显示,在线上电商平台(京东天猫淘宝)销量累计超过211万元&#xff0c…

Baidu Comate:释放编码潜能,革新软件开发

Baidu Comate Baidu Comate,智能代码助手,凭借着文心大模型的强大支撑,结合了百度多年的编程实战数据和丰富的开源资源,形成了一款崭新的编码辅助利器。它不仅具备着高智能、多场景、价值创造的特质,更可广泛应用于各…

C# OpenCvSharp Demo - 棋盘格相机标定

C# OpenCvSharp Demo - 棋盘格相机标定 目录 效果 项目 代码 下载 效果 项目 代码 using OpenCvSharp; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; using System.Text; using Sys…

判断点在多边形内部

0. 介绍 网上资料很多,只简单介绍下,方便自己今后的理解。 1. 射线法 从该点引一条射线出来,如果和多边形有偶数个交点,则点在多边形外部。 因为有入必有出,所以从外部引进来的射线一定是交多边形偶数个点。 如图…

Pyecharts的编程环境准备

一,准备Python编程环境: Python版本:3.10以上,最高版本3.12 https://www.python.org/ 进入官网,点击downloads—>windows进入下载页面,搜索”3.10.6”找到指定版本,下载并安装64位Installer…

完整性验证器:迈向 Starknet 超高可扩展性的一大步

原文:https://www.starknet.io/en/content/the-integrity-verifier-a-leap-toward-starknet-hyperscaling;https://www.starknet.io/en/ecosystem/grant 编译:TinTinLand 核心观点 由 Herodotus 开发的完整性验证器,使开发者能够…