03JVM_类加载

一、类加载与字节码技术

1. 类文件结构

2. 字节码指令

3. 编译期处理

4. 类加载阶段

5. 类加载器

6. 运行期优化

1.类文件结构

类文件结构

1.1 魔数magic

介绍

每个java class文件的前4个字节是魔数:0x CAFEBABE。魔数作用在于分辨出java class文件和非java class文件。

1.2 版本minor_version,major_version

介绍

4~7字节,表示类的版本00 34(16进制换算十进制是52),表示java8

51 java7

52 java8

53 java9

1.3 常量池

介绍

存放字面量(文本字符串,final常量)和符号引用(包名,类名)

①8~9字节,常量池计数器2个字节代表常量池的长度。00 23(十进制35)表示有1~34项。

②后面n个字节(1-常量池-1)就是常量池表,存放的是字面量(字符串,final常量值)和符号引用(类,方法,字段描述符)。

1.4访问标识和继承信息

1.access_flags :常量池结束后的2个字符就是访问标志

判断这个class是类还是接口...

经过查表知道00 21 是由0x0020+0x0001组合而成,所以是公共类

2.this_class :占2字节,当前类的名字是什么

00 03 表示常量池的#3项,需要从常量池读取

3.super_class :占2字节,父类的名字是什么。

00 04 表示常量池的#4项,需要从常量池读取

4. 接口集合

①interfaces_count:占2字节,实现接口的数量

00 00 没实现接口

②interfacesinterfaces_count:占2字节,接口有哪些

1.5字段表集合

fields

字段表表示声明的变量,字段的名字,字段的类型是什么。通过引用常量池的常量描述

1.fields_count (字段计数器)

2个字节,表示成员变量的数量

2.fields 字段表

字段表结构

字段表含义

00 02:访问标志,查上表,私有的

00 05:字段名,查常量池 #5

00 06:字段数据类型,查常量池 #6

00 00: 属性计数器

00 02: 属性集合

1.6方法表集合

methods:

①指向常量池索引的集合。每一个method_info对应着一个类或接口的信息。

②方法的访问修饰符,方法的返回值,方法参数信息

1. methods_count 方法计数器

2个字节,方法的个数

00 02 :有2个方法

2. methods 方法表

存放方法信息的

详细的列表

1.7附加属性表集合

介绍

class文件的源文件名称...

相关推荐
2602_959960925 小时前
电商大厂Java面试实录:Spring Boot/JVM/Redis/Kafka/微服务/安全/测试全解析
java·jvm·spring boot·redis·面试题
Javatutouhouduan1 天前
Java初学者如何高效学习JVM?
java·jvm·java虚拟机·java面试·后端开发·java程序员·java八股文
2602_959960921 天前
电商场景Java面试:Spring Boot、JVM、Redis、Kafka、微服务与分布式事务考点解析——谢飞机的作死面试记
java·jvm·spring boot·redis·面试题
wuminyu1 天前
JDK21中FFM api的upcall回调机制解析
java·linux·c语言·jvm·c++
松仔log1 天前
Kotlin中级——协程
java·jvm·kotlin
吴声子夜歌2 天前
Java面试题——JVM(二)
java·开发语言·jvm
Dicky-_-zhang3 天前
大模型部署架构:从推理引擎到弹性扩缩容的工程实践
java·jvm
聊浮游3 天前
JAVA2026最新全套学习资料、学习路线
java·开发语言·jvm·mysql·spring·maven·idea
阿昌喜欢吃黄桃3 天前
RocketMQ 同一 JVM 启动多个 Producer 导致 NameServer 只连一个的问题
jvm·rocketmq·mq
2602_959960923 天前
大厂Java面试:Spring Boot、JVM、Redis、Kafka与Elasticsearch在内容社区UGC场景下的实战拷问
java·jvm·spring boot·redis·面试题