字节码:
- 1: 字节码结构,class文件的二进制文件意义
- 2: 现有的字节码技术,asm与javasist
- 3: dubbo 中字节码的运用
class文件的字节码文件的结构
什么是字节码技术
java 常被使用为跨平台开发的首选,只要依赖其一次编译,到处执行;而有这个特性,主要是其编译产生的class文件,是一个固定结构有规则十六进制文件;
.java--> java compile(javac)-->.class文件(有特定的十六进制结构的文件)
image.png
通过本地查看本地编译好的class文件,人们很容易的发现,cafebabe的数值(咖啡宝贝);下面图详细介绍了整个class文件的结构:比我讲的更详细,附链接:字节码增强技术探索
image.png
- 魔数 : 16进制的class文件。前面的4位,cafe babe 这正是java的图标 ;
- 版本号 :前两个字节表示次版本号(Minor Version),后两个字节表示主版本号(Major Version),0000 次版本,0034主版本号,转换成10进制52;oracle版本对应的是java ,1.8
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的过程;
参考文献:
网友评论