JVM——类加载与字节码技术—类文件结构

由源文件被编译成字节码文件,然后经过类加载器进行类加载,了解类加载的各个阶段,了解有哪些类加载器,加载到虚拟机中执行字节码指令,执行时使用解释器进行解释执行,解释时对热点代码进行运行期的编译处理。

1.类文件结构

根据下面规范,魔数,两个版本,常量池信息,访问修饰,类名信息,父类信息,接口信息,类中成员变量,方法信息,类的附加属性信息。

加上-parameters参数会保留方法中参数的名称信息

第一列是八进制的标号。

1.1魔数

不同的文件有不同的魔数信息。魔数用于标识文件是什么类型。

java选择"ca fe ba be"作为魔数。

1.2 版本

小版本是前两个,主版本是后两个,16进制的34对应10进制的52,对应jdk8。

1.3 常量池

经过翻译解读知道第二项是System.out,第三项是要打印的字符串常量,第四项表示是out中的println方法,参数和返回值类型是(String)void。

()V表示空参的void.

第五项解读出来就是cn/itcast/jvm/t5/HelloWorld 本类信息

第六项是java/lang/Object 父类信息

开头加上L是引用类型

这里讲的什么狗屎?总之一共34项记录了常量池里面各种信息。

这里可以去对照深入理解java虚拟机第三版中的、第222页的常量池中的17种数据类型的结构总表来看。

1.4访问标识与继承信息

接下来到访问修饰到接口这部分的描述

知道29 56都是常量池相关内容

访问修饰部分通过查表知道00 21 是下面表中01+20,是一个public 类。

1.5 Field 信息

成员变量信息

java中为使字节码更加紧凑使用了更简洁的字符表示类型信息,如B表示byte。

L ClassName表示引用类型,【表示一维数组

1.6Method 信息

这里方法信息较为复杂的,需要了解反编译。

了解即可......什么狗屎?

上面是init方法的解读........main方法不看了

看不懂是因为byd没有把那几个映射表拿出来,前面的常量有常量结构表,变量、方法、属性都有对应的映射表,告诉你各个类型用什么十六进制表示,然后这些类型由多少个十六进制组成

1.7 附加属性

蚌埠住了,直接跳了

去搜一下jvm类文件结构,看看其他的视频先。

了解即可

了解即可

了解即可

相关推荐
仙俊红5 小时前
在 Java 中,`==` 和 `equals()` 的区别
java·开发语言·jvm
Yana.nice6 小时前
JVM与KVM
jvm
皮卡丘学了没7 小时前
JVM-对象存活判断机制
jvm
再睡一夏就好9 小时前
多线程并发编程核心:互斥与同步的深度解析及生产者消费者模型两种实现
linux·运维·服务器·jvm·c++·笔记
笨手笨脚の14 小时前
深入理解 Java 虚拟机-01 JVM 内存模型
java·jvm··虚拟机栈·方法区
rchmin14 小时前
ThreadLocal内存泄漏机制解析
java·jvm·内存泄露
❀͜͡傀儡师15 小时前
Docker快速部署一个轻量级邮件发送 API 服务
jvm·docker·容器
虾说羊15 小时前
JVM-1
jvm
曹轲恒17 小时前
jvm 局部变量表slot复用问题
java·开发语言·jvm
这周也會开心17 小时前
JVM-槽位复用
jvm