Java类文件结构及类加载机制

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 该文章主要讨论了Java类文件的结构以及Java类的加载机制,并提到了双亲委派模型的相关内容。

计算器只认识0和1,那么我们写的java代码是怎么被操作系统识别并执行的呢?

其实这里就是虚拟机起了很多作用了,JVM定义了一套字节码规范,只要符合虚拟机规范的字节码就可以被虚拟机识别,加载,执行 ,class文件就是字节码的来源,JVM通过 ,可见CLASS文件是JVM平台的基石。

class文件结构是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑的排列在class文件之中,中间没有任何分隔符。

包含两种数据结构:

1、无符号数:基本的数据类型,以u1,u2,u4,u8代表1,2,4,8个字节的无符号数,用来描述数字,索引引用,数量值

2、表:由无符号数或者其他表作为数据项构成的复合数据类型,以_info结尾

u4 magic 魔术, 身份识别,是否可以被虚拟机接受

u2 minor_version 高版本可以兼任低版本 jdk1 以45为版本号

u2 major_version

cp_info 常量池 存储字面量和符合引用 类和接口全限定名 字段的名称和描述符 方法的名称和描述符

javap a.class javap命令可以查询class文件字节码

类加载机制

class文件格式了解了,但是这些class文件是怎么被虚拟机识别加载到内存的,这里会经历一些过程。

类加载生命周期:加载,验证,准备,解析,初始化,使用,卸载

加载:通过类全限定名进行获取二进制字节流

验证:文件格式,元数据,字节码,符号引用等验证

准备:为类变量分配类型并设置类初始值

解析:将符号引用替换成直接引用,包括类或接口的解析,字段解析,类方法解析,接口方法解析

初始化:当遇到new ,getstatic,puttstatic,invokestatic指令时进行初始化,方法中会对变量赋值或者静态代码块的初始化

静态代码块只能访问在静态代码块定义之前的变量,定义在它之后的变量可以赋值,但是不能访问,并且总是会先执行父类的方法

虚拟机天然保证在多线程下会正确执行,只会有一个线程同时执行

类加载机制:双亲委派模型

启动类加载器:加载java_home/lib下的jar文件

扩展加载器:加载java_home/lib/ext的jar文件

应用类加载器:加载用户类路径classpath下的类文件

双亲委派模型以组合关系来复用父类加载器代码。

工作过程:一个类加载器收到加载类请求时,首先会把加载请求委派父类加载器去完成,只有当父类加载器反馈自己加载不了当前请求的类,它才会自己去加载。如下图:

双亲委派机制好处:保证一个类只会被一个类加载器加载,保证了系统的稳定可靠性。使得java类有了一种层级关系。

破坏双亲委派机制的例子:

spi提供的接口的实现类启动器类无法加载,所以有了线程上下文类加载器,例如jdbc,jndi

相关文章
|
1天前
|
存储 算法 Java
🚀Java零基础-顺序结构详解 🚀
【10月更文挑战第11天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
18 6
|
1天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
13 6
|
3天前
|
IDE Java 编译器
Java:如何确定编译和运行时类路径是否一致
类路径(Classpath)是JVM用于查找类文件的路径列表,对编译和运行Java程序至关重要。编译时通过`javac -classpath`指定,运行时通过`java -classpath`指定。IDE如Eclipse和IntelliJ IDEA也提供界面管理类路径。确保编译和运行时类路径一致,特别是外部库和项目内部类的路径设置。
|
2天前
|
安全 Java 测试技术
Java零基础-StringBuffer 类详解
【10月更文挑战第9天】Java零基础教学篇,手把手实践教学!
9 2
|
3天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其独特的“不重复性”要求,彻底改变了处理唯一性约束数据的方式。
【10月更文挑战第14天】从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其独特的“不重复性”要求,彻底改变了处理唯一性约束数据的方式。本文深入探讨Set的核心理念,并通过示例代码展示了HashSet和TreeSet的特点和应用场景。
8 2
|
3天前
|
存储 Java 索引
Java 中集合框架的常见接口和类
【10月更文挑战第13天】这些只是集合框架中的一部分常见接口和类,还有其他一些如 Queue、Deque 等接口以及相关的实现类。理解和掌握这些集合的特点和用法对于高效编程非常重要。
|
4天前
|
Java
Java开发如何实现文件的移动,但是在移动结束后才进行读取?
【10月更文挑战第13天】Java开发如何实现文件的移动,但是在移动结束后才进行读取?
13 2
|
4天前
|
Java Apache Maven
Java将word文档转换成pdf文件的方法?
【10月更文挑战第13天】Java将word文档转换成pdf文件的方法?
12 1
|
4天前
|
监控 Java
Java定时扫码一个文件夹下的文件,如何保证文件写入完成后才进行处理?
【10月更文挑战第13天】Java定时扫码一个文件夹下的文件,如何保证文件写入完成后才进行处理?
17 1
|
8天前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
21 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用