• 字节码指令简介


    加载和存储指令
    将局部变量加载到操作栈:iload
    将数值从操作栈存储到局部变量表istore
    将一个常量加载到操作数栈:bipush、ldc、iconst
    运算指令
    加法:iadd
    减法:isub
    乘法:imul
    除法:idiv
    求余:irem
    取反:ineg
    位移:ishl,ishr
    或:ior
    与:iand
    异或:ixor
    局部变量自增:iinc
    比较:dcmpg
    类型转换指令·
    虚拟机直接支持以下数值类型的宽化类型转换
    int-->long,float,double
    long-->float,double
    float-->double
    相对的窄化转换需要用到转换指令完成。
    i2b:int-->byte
    对象创建与访问指令
    创建类实例:new
    创建数组:newarray,
    访问类字段和实例字段:getfield,putfield,getstatic,putstatic
    把数组元素加载到操作数栈的指令:baload(byte array load)
    将一个操作数栈值存储到数组元素中的指令:bastore(byte array store)
    取数组长度:arraylength
    检查实例类型:instanceof、checkcast
    操作数栈管理指令
    将操作数栈的栈顶一个或两个元素出栈:pop、pop2
    复制栈顶一个或两个数值并将复制值或双份的复制值重新压入栈顶:dup
    将栈最顶端的两个数值互换:swap
    控制转移指令
    条件分支:ifeq、iflt、ifle、ifne、ifgt、ifnull、ifnonnull、if_icmpeq
    复核条件分支:tableswitch、lookupswitch
    无条件分支:goto
    方法调用和返回指令
    invokevirtual:调用对象的实例方法
    invokeinterface:调用接口方法
    invokespecial:调用一些需要特殊处理的实例方法
    invokestatic:调用类方法
    invokedynamic:运行时动态解析出调用点限定符所引用的方法。
    返回:ireturn
    异常处理指令
    throw:athrow,catch采用异常表来完成的。
    同步指令
    Java虚拟机可以支持方法级的同步和方法内部一段指令序列的同步,这两种同步结构都是使用管程Monitor来支持的。
  • 相关阅读:
    BZOJ1954 Pku3764 The xor-longest Path
    BZOJ3697 采药人的路径
    BZOJ1468 Tree
    BZOJ2326 [HNOI2011]数学作业
    BZOJ2809 [Apio2012]dispatching
    BZOJ1334 [Baltic2008]Elect
    BZOJ2882 工艺
    BZOJ3791 作业
    BZOJ1224 [HNOI2002]彩票
    [noip2013]花匠
  • 原文地址:https://www.cnblogs.com/wqff-biubiu/p/10402867.html
Copyright © 2020-2023  润新知