Class文件结构与加载机制

由于未提供博客具体内容,无法给出包含关键信息的摘要。
* 这是JDK8编译的字节码
* 一个字节8bit,可以储存两个16进制数

cafe babe //魔数,用于确认这是一个Class文件
0000 	  //次版本号(一般是0没启用)
0034 	  //主版本号 52代表JDK8

0013	  //常量池计数器,18个常量(19去掉0表示空引用,还有18个)

0a 		  //第一个常量 CONSTANT_MethodRef_info  --java/lang/Object <init> void
0004
000f
09 		  //第二个常量 CONSTANT_FieldRef_info  --jvmClass/jvmClass name Ljava/lang/String;
0003
0010
07 		  //第三个常量 CONSTANT_class_info --jvmClass/jvmClass
0011
07 		  //第四个常量 CONSTANT_class_info --java/lang/Object
0012
01 		  //第五个常量 CONSTANT_UTF8_info
0004	 (字符串长度4)
6e61 6d65(十六进制转成字符串就是name)

01 		  //第六个常量 CONSTANT_UTF8_info
0012
4c6a 6176 612f 6c61 6e67 2f53 7472 696e 673b(Ljava/lang/String;)

01 		  //第七个常量 CONSTANT_UTF8_info
0006
3c69 6e69 743e (<init>)

01 		  //第八个常量 CONSTANT_UTF8_info
0003
2829 56 ()V (表示方法的返回值为void)

01 		  //第九个常量 CONSTANT_UTF8_info
0004 
436f 6465 (Code)

01        //第十个常量 CONSTANT_UTF8_info
000f
4c69 6e65 4e75 6d62 6572 5461 626c 65 (LineNumberTable 代码的行号,异常定位行号用到了)

01 		  //第十一个常量 CONSTANT_UTF8_info
0007
6765 744e 616d 65(getName 方法名称)

01 		  //第十二个常量 CONSTANT_UTF8_info
0014
2829 4c6a 6176 612f 6c61 6e67 2f53 7472 696e 673b(Ljava/lang/String;)

01 		  //第十三个常量 CONSTANT_UTF8_info
000a 
536f 7572 6365 4669 6c65(SourceFile 源文件标识)

01 		  //第十四个常量 CONSTANT_UTF8_info
000d
6a76 6d43 6c61 7373 2e6a 6176 61(jvmClass.java 文件名)

0c 		  //第十五个常量 CONSTANT_NameAndType_info
0007 
0008

0c 		  //第十六个常量 CONSTANT_NameAndType_info
0005
0006

01 		  //第十七个常量 CONSTANT_UTF8_info
0011
6a 766d 436c 6173 732f 6a76 6d43 6c61 7373(jvmClass/jvmClass 全包名+全限定名)

01 		  //第十八个常量 CONSTANT_UTF8_info
0010
6a61 7661 2f6c 616e 672f 4f62 6a65 6374(java/lang/Object)


0021 	  //类的访问标识 ACC_PUBLIC + ACC_SUPER
0003 	  //类索引(jvmClass/jvmClass)
0004 	  //父类索引(java/lang/Object)
0000 	  //没有实现任何接口,所以为0

0001 	  //字段表计数器,有一个字段(这里指类级字段或实例级字段,不包括方法中的局部变量)
0002 	  //private
0005 	  //name
0006      //Ljava/lang/String;
0000 	  //没有其他属性了

0002 	  //方法表计数器,有两个方法

0001 	  //public
0007 	  //<init>
0008      //void
0001      //一个属性
0009 	  //Code属性
0000 001d //属性长度29
0001 	  //最大栈深度1
0001 	  //最大局部变量槽的数量1
0000 0005 //字节码指令是5
2a 		  //aload_0 将第一个引用类型本地变量推送至栈顶
b7 		  //invokespecial 调用超类构造方法,实例初始化方法,私有方法
00 	      //nop 什么都不做
01 	  	  //aconst_null 将null推送至栈顶
b1        //return 从当前方法返回void
0000 	  //异常信息为空
0001 	  //一个属性
000a      //LineNumberTable 主要用于描述Java源码与字节码行号对应关系
0000 0006 //属性长度为6
0001      //有一个属性
0000      //字节码行号
0003      //代码的行号

0001      //public
000b      //getName
000c      //Ljava/lang/String;
0001      //有一个属性
0009      //Code属性
0000 001d //Code属性长度
0001      //最大栈深度
0001      //最大局部变量槽
0000 0005 //五个指令码
2a
b4
00
02
b0
0000      //异常信息为空
0001      //一个属性
000a      //LineNumberTable
0000 0006 //属性长度为6
0001      //有一个属性
0000      //字节码行号
0007      //代码的行号

0001      //属性表计数器,一个属性
000d      //SourceFile 记录源文件名称
0000 0002 //两个长度
000e      //jvmClass.java

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值