400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

java中ASM框架有什么用

这篇文章主要为大家展示了“java中ASM框架有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java中ASM框架有什么用”这篇文章吧。

创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、网站设计、辽宁网络推广、小程序开发、辽宁网络营销、辽宁企业策划、辽宁品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供辽宁建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com

简介

ASM是java字节码操作框架,利用该框架可以达到动态修改java运行对象代码的目的,也可以实现动态代理等功能;

线程和栈帧

要了解ASM字节码操作,先要熟悉jvm线程与栈帧结构,jvm开辟一个线程,便会开辟属于这个线程虚拟机栈,本地方法栈,程序计数器,其主要作用如下:

基本类型

java字节码中的类型表达和java代码是不一样的,在java字节码中利用如下符号来表达基本类型:

java类型type含义
booleanZ布尔
charC字符
byteB字节
shortS短整型
intI整型
longJ长整型
floatF浮点数
referenceL类的引用
voidV
doubleD双精度浮点型
ObjectLjava/lang/Object;对象
int[][I整型数组
Object[][][[Ljava/lang/Object;对象数组

注: L+className;代表某类的引用(";"不能省略)

字节码实例:

Java代码字节码表示注释
double[][][[D
Object run(int i,double d,Thread t)(IDLjava/lang/Thread)Ljava/lang/Object;(方法参数字节码类型)方法返回参数类型

字节码指令操作

字节码指令操作其实主要操作局部变量表和操作数栈,具体流程是:load局部变量到操作数栈,然后给cpu下达执行指令,然后将操作数栈栈顶元素弹出,从而实现一个操作;
字节码指令都有一定的格式:[type+]op["_"+value];

其中type根据基本类型可以为:i(int 整数),s(short 短整数),b(byte 字节),c(char字符),l(long长整数),d(double双精度浮点数),f(float 浮点数),a(reference 引用);
value指的是操作数,如果操作数为负数时需要添加'm"前缀,例如iconstant_m1表示将-1压栈;如果操作数值超过一定大小,则会将该操作数存放在常量池,用#indexbyte表示其位置;
op指的是操作码,通常用一个字节表示;

字节码指令操作主要分为九大指令:

加载和存储指令

加载指令主要是将局部变量和常量压入到操作数栈,具体指令有:

如下图所示:

加载存储指令.png

运算指令

运算指令有以下几种:

类型转换指令

类型转换指令有以下几种:

对象创建和访问指令

对象创建和访问指令通常需要两个操作数indexbyte1和indexbyte2

操作数栈管理指令

字等于两个字节,半个slot,16位

控制转移指令:

控制转移指令分为跳转指令和比较指令,无条件跳转指令,表跳转指令,异常跳转指令;
跳转指令:

比较指令:

无条件转移指令:

表跳转指令:

异常跳转指令:

方法调用和返回指令:

同步方法指令:

以上是“java中ASM框架有什么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


文章标题:java中ASM框架有什么用
分享路径:http://mbwzsj.com/article/iiesji.html

其他资讯

让你的专属顾问为你服务