zoukankan      html  css  js  c++  java
  • 实战JAVA虚拟机 JVM故障诊断与性能优化(十)---字节码的执行

      字节码执行是java虚拟机的重点,就如同汇编语言对于计算机一样重要,字节码对于java虚拟机来说是执行的根本。

    执行的基础:Java虚拟机常用指令介绍

      常用入栈指令:将常数压入操作数栈,根据数据类型和入栈内容不同,又可以分为const系列、push系列、ldc系列

        bipush (8位),sipush (16位)

        ldc,ldc_w,long或者double类型 ldw2_w指令

      局部变量压栈指令:将给定的局部变量表中的数据压入操作数栈:

        xload、xload_n、xaload

      出栈装入局部变量表指令

        xstore、xstore_n、xastore

      通用型操作

        NOP:和汇编中nop一样,表示什么都不做

        dup:duplicate复制,它会将栈顶元素复制一份并再次压入栈

        pop:把一个元素从栈顶弹出

      类型转换指令

        x2y:x可能是i,f,l,d,y,y可能是i,f,l,d,c,s,b,翻译分别是:

        

      对象/数组操作指令

        1、创建指令

          new、newarray、anewarray、multianewarray

          new:用于创建普通对象

          anewarray:用于创建数组

          multianewarray:创建多维数组

        2、字段访问指令

          getfield、putfield:操作实例对象的字段

          getstatic、putstatic:操作类的静态字段

        3、类型检索指令

          checkacast:用于检查类型强制转换是否可以进行,如果可以,那么checkcast指令不会改变操作数栈,否则它会抛出ClassCastException异常

          instanceof:用于判断给定对象是否是某一个类的实例,它会将判断结果压入栈

        4、数组操作指令

          xastore,xaload

      比较控制指令

        1、比较指令

          dcmpg、dcmpl、fcmpg、fcmpl、lcmp

        2、条件跳转

          ifeq、iflt、ifle、ifne、ifgt、ifge、ifnull、ifnonnull

        3、比较条件跳转指令

          if_icmpeq、if_icmpne、if_icmplt、if_icmpgt、if_icmple、if_icmpge、if_icmpeq、if_acmpne

          以字母"i"开头的指令针对int整数操作(包括short和byte),以字符"a"开头的指令表示对象引用的比较。

        4、多条件分支跳转

          tableswitch:要求多个条件分支值是连续的

          lookupswitch:内部存放着各个离散的case-offset

        5、无条件跳转

          goto

      函数调用与返回指令

        invokevirtual:虚函数调用,调用对象的实例方法,支持多态

        invokeinterface:指接口方法的调用

        invokespecial:调用特殊的一些方法,比如构造函数、类的私有方法、父类方法。这些方法都是静态类型绑定的,不会在调用时进行动态派发

        invokestatic:调用类的静态方法

        invokedynamic:调用动态绑定的方法

    同步控制

      Java虚拟机提供了monitorenter、monitorexit两条执行来完成临界区的进行和离开操作,

            

        

  • 相关阅读:
    算法(两数之和)
    算法(动态规划二)
    算法(动态规划一)n个学生问题
    Navigator 对象
    Window 对象
    JavaScript 运算符
    JavaScript 全局属性/函数
    JavaScript RegExp 对象
    JavaScript String 对象
    JavaScript Number 对象
  • 原文地址:https://www.cnblogs.com/kaishi/p/7834329.html
Copyright © 2011-2022 走看看