JVM class文件格式

java从编码到执行在这里插入图片描述

x.java 通过javac命令生成x.class
x.class通过java命令执行。通过classloader load到内存。代码经常需要引用java类库,所以也需要通过classloader load到内存
装载完成后,会调用字节码解释器,或者JIT来进行解释或者编译
编译完成之后通过执行引擎开始执行
执行引擎对面的就是操作系统和硬件

class文件结构

数据类型

u1 u2 u4 u8和_info(表类型)
_info的来源是hotspot源码中的写法
u指无符号, u1为一个字节(二进制8位,16进制2位,如CA), u2为两个字节

查看bytecode插件:
IDEA插件 JClassLib

class结构

在这里插入图片描述
constant_pool_count被用来表示常量池的常量数,这里的常量池是从1开始索引的,因为第0项是用于某些指向常量池的索引值的数据在特定情况下表示“不引用任何一个常量池项目”的含义。

常量池的每一个常量都是一个表,表结构起始的第一位是个u1类型的标志位(tag),代表着当前常量属于哪种常量类型。
在这里插入图片描述
具体项,比如CONSTANT_Utf8_info,如下
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_33873431/article/details/112253734