android开发自己总结的java字节码常见指令
自己总结的java字节码常见指令:
ldc:将常量值从常量池中推送至栈顶
pop:将栈顶数值弹出
dup:复制栈顶数值并将复制值压入栈顶
局部变量表 -> 操作数栈:load指令(将数据加载到操作栈)
操作数栈 -> 局部变量表:store指令(将数据存储到变量表)
i整数,l长整数,f浮点数,d双精度浮点数,a对象引用
iadd整数相加,is整数相减,imul整数相乘,idiv整数除,irem整数取余,ineg整数取负,其他类似。
调用构造函数:invokespecial,调用实例方法:invokevirtual,调用静态方法:invokestatic
ireturn表示方法返回整数类型,areturn表示方法返回对象引用比如this,其他类似。
javap查看class字节码命令:javap -v -p Test.class
CAFE(2字节)BABE(2字节)、次版本(2字节)、主版本(2字节)、常量池大小(2字节)、常量池数据、
类访问标志(2字节)、类索引(2字节)、父类索引(2字节)、
接口计数器(2字节)、接口列表
字段计数器(2字节)、字段列表
方法计数器(2字节)、方法列表
属性计数器(2字节)、属性列表
别人总结的:https://blog.csdn.net/qq271859852/article/details/78307232
JVM指令助记符
变量到操作数栈:iload,iload_,lload,lload_,fload,fload_,dload,dload_,aload,aload_
操作数栈到变量:istore,istore_,lstore,lstore_,fstore,fstore_,dstore,dstor_,astore,astore_
常数到操作数栈:bipush,sipush,ldc,ldc_w,ldc2_w,aconst_null,iconst_ml,iconst_,lconst_,fconst_,dconst_
加:iadd,ladd,fadd,dadd
减:is ,ls ,fs ,ds
乘:imul,lmul,fmul,dmul
除:idiv,ldiv,fdiv,ddiv
余数:irem,lrem,frem,drem
取负:ineg,lneg,fneg,dneg
移位:ishl,lshr,iushr,lshl,lshr,lushr
按位或:ior,lor
按位与:iand,land
按位异或:ixor,lxor
类型转换:i2l,i2f,i2d,l2f,l2d,f2d(放宽数值转换)
i2b,i2c,i2s,l2i,f2i,f2l,d2i,d2l,d2f(缩窄数值转换)
创建类实便:new
创建新数组:newarray,anewarray,multianwarray
访问类的域和类实例域:getfield,putfield,getstatic,putstatic
把数据装载到操作数栈:baload,caload,saload,iaload,laload,faload,daload,aaload
从操作数栈存存储到数组:bastore,castore,sastore,iastore,lastore,fastore,dastore,aastore
获取数组长度:arraylength
检相类实例或数组属性:instanceof,checkcast
操作数栈管理:pop,pop2,dup,dup2,dup_xl,dup2_xl,dup_x2,dup2_x2,swap
有条件转移:ifeq,iflt,ifle,ifne,ifgt,ifge,ifnull,ifnonnull,if_icmpeq,if_icmpene,
if_icmplt,if_icmpgt,if_icmple,if_icmpge,if_acmpeq,if_acmpne,lcmp,fcmpl
fcmpg,dcmpl,dcmpg
复合条件转移:tableswitch,lookupswitch
无条件转移:goto,goto_w,jsr,jsr_w,ret
调度对象的实便方法:invokevirt l
调用由接口实现的方法:invokeinterface
调用需要特殊处理的实例方法:invokespecial
调用命名类中的静态方法:invokestatic
方法返回:ireturn,lreturn,freturn,dreturn,areturn,return
异常:athrow
finally关键字的实现使用:jsr,jsr_w,ret
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2019-04-22 web前端css清除浮动的方法总结
2019-04-22 Android数据格式化给一串数字添加分位符的解决方法
2017-04-22 圆角进度条,带数字居中显示的圆角进度条
2017-04-22 上下滑动控件
2017-04-22 window下Jekyll+github搭建自己的博客
2017-04-22 解决方案 git@github.com出现Permission denied (publickey)
2017-04-22 初始化并提交代码到github的步骤