java 字节码

2019-12-21  本文已影响0人  卫渐行

字节码:

  • 1: 字节码结构,class文件的二进制文件意义
  • 2: 现有的字节码技术,asm与javasist
  • 3: dubbo 中字节码的运用

class文件的字节码文件的结构

什么是字节码技术

java 常被使用为跨平台开发的首选,只要依赖其一次编译,到处执行;而有这个特性,主要是其编译产生的class文件,是一个固定结构有规则十六进制文件;

.java--> java compile(javac)-->.class文件(有特定的十六进制结构的文件)


image.png

通过本地查看本地编译好的class文件,人们很容易的发现,cafebabe的数值(咖啡宝贝);下面图详细介绍了整个class文件的结构:比我讲的更详细,附链接:字节码增强技术探索

  • 魔数 : 16进制的class文件。前面的4位,cafe babe 这正是java的图标 ;
  • 版本号 :前两个字节表示次版本号(Minor Version),后两个字节表示主版本号(Major Version),0000 次版本,0034主版本号,转换成10进制52;oracle版本对应的是java ,1.8
image.png
image.png

通过jclasslib工具,我们可以对于二进制文件进行查看,其文件格式主要是六部分,通用的信息;包括魔术,版本号;

Table 1 . Constant pool tags

Constant type value
Constant_fieldref 9
Constant_Methodref 10
Constant_InterfaceMethodref 11
Constant_String 8
Constant_Integer 3
Constant_Float 4
Constant_Long 5
Constant_Double 6
COnstant_NameAndType 12
Constant_Utf8 1
Constant_MethodType 16
COnstant_InvokeDanamic 18

再了解这些基本概念之后,我们就对于这些数class文件进行编辑,

常见的字节码技术

在了解class文件编码规则之后,能够对于对二进制文件进行处理,,比如说
asm(主要是在二进制文件的层面上),javassist以及cglib是在更高的层面上,;


image.png

到那时在java中,spring以及dubbo中,常见的使用cllib以及javassist的软件,通过这两种软件,能够帮助我们更好的理解springaop框架,以及dubbo实现rpc的过程;在dubbo中,service通过暴露服务,客户端调用对应的服务,能够快速的rpc的过程;

参考文献:

1 字节码增强技术探索

2: javasisit与asm

3: class文件的格式
4: dubbo implementation

上一篇 下一篇

猜你喜欢

热点阅读