`
ccr1988
  • 浏览: 35714 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jvm解析六(JVM规范<下>)

jvm 
阅读更多
字节码指令
     第一:基本数据类型
       加载和存储
          1,将一个局部变量加载到操作栈的指令格式格式是:[数据类型only int,long,float,double]+load_<操作数>,例如:iload,iload_<n>,lload,lload_<n>….
         2,将一个数值从操作数栈存储到局部变量表指令格式:[数据类型only int,long,float,double]+store_<操作数>,例如:istore,istore_<n>,lstore,lstore_<n>..
         3,将一个常量加载到操作数栈的指令格式一:[数据格式(only byte,short)]+ipush,例如:bipush,sipush.
                                 格式二:[数据类型only int,long,float,double]+const_<操作数>  ,例如:iconst_ml,iconst_<i>…   
          4,扩展局部变量表的访问索引的指令:wide
     运算指令
          1,加法指令格式:[数据类型only int,long,float,double]+add,  例如:iadd,ladd,fadd,dadd
         2,减法指令格式:[数据类型only int,long,float,double]+sub,  例如:isub,lsub,fsub,dsub
         3,乘法指令格式:[数据类型only int,long,float,double]+mul,  例如:imul,lmul,fmul,dmul
         4,乘法指令格式:[数据类型only int,long,float,double]+div,   例如:idiv,ldiv,fdiv,ddiv
         5,求余指令格式:[数据类型only int,long,float,double]+rem,  例如:irem,lrem,frem,drem
         6,取反指令格式:[数据类型only int,long,float,double]+neg,   例如:ineg,lneg,fneg,dneg
         7,位移指令格式:ishl,ishr,iushr,lshl,lushr
         8,按位或/与指令格式:[数据类型only int,long]+or/and,      例如:ior/iand,lor/land
         9,按位异或指令格式:[数据类型only int,long]+xor,         例如:ixor,lxor
         10,局部变量自增指令格式:[数据类型only int]+inc         例如:iinc
         11,比较指令格式:dcmpg,dcmpl,fcmpg,fcmpl,lcmp
     第二:对象
         创建类实例指令:new
        创建数组的指令:newarray,anewarray,multianewarray
        访问字段指令:[ 非static]getfield,putfield,[static]getstatic,putstatic
        把数组元素加载到操作数栈中指令格式:[数组中数据类型byte,short,char, int,long,float,double]+astore,例如:bastore,castore,sastore,iastore,fastore,dastore,aastore
       取数组长度: arraylength
       检查类实例类型指令:instanceof ,checkcast
       方法的调用
          1,调用对象的实例方法:invokevirtual
        2,调用对象的接口方法:invokeinterface
        3,调用特殊处理方法(包括实例初始化方法,私有方法和父类方法):invokespecial
        4,调用静态方法:invokestatic
      方法的返回指令
         Ireturn(当返回值为boolean,byte,char,short,int时),lreturn,freturn,dreturn,areturn,return(void)
     第三:操作数栈管理指令
            包括:popmpop2,dup,dup2,dup_x1,dup_x2,dup2_x1,dup2_x2
     第四:控制指令
           条件分支指令:ifeq,iflt,ifge,ifle,ifne,ifnull,ifnonnull,if_icmpeq,if_icmpe,if_cimpgt,if_icmple,if_icmpge,if_acmpeq,if_acmpne
           复合条件分支指令:tableswitch,lookupswitch
           无条件分支指令:goto,goto_w,jsr,jsr_w,ret
Jvm编译
   编译格式
      <index><opcode>[<operand1><operand2>…][<comment>]
      Index: code[]中操作码的索引
       Opcode: 操作码
       Operand:操作数
       Comment:注释
       例子 1:
         
10	dc #1 //Push float constant 100.0
   
      例子2:
      Java代码:
   Void spin(){
     Int i;
     For(i=0;i<100;i++){
    ;//loop body is empty
}
}
编译后代码:
Method void spin()
  0  iconst_0   // push int constant0
  1  istore_1   // store into local variable (i=0)
  2  goto 8    // first time through don’t increment
  5  iinc 1  1  //Increment local variable 1 by 1(i++)
  8  iload_1   //push local variable
  9  bipush 100  //push int constant 100
 11  if_icmplt 5  // compare and loop if less than z(i<100)
 14  return    // return void when done
0
0
分享到:
评论

相关推荐

    JAVA虚拟机(JVM)规范(中文版).rar

    JVM规范定义了Java程序如何在特定系统上被加载、解析、执行以及内存管理的一系列规则。 ### JVM架构 JVM主要由以下几个组件构成: 1. **类装载器(ClassLoader)**:负责查找和加载类文件到JVM内存中。 2. **运行...

    Java语言规范和JVM规范官网文档

    Java语言规范和JVM规范是理解Java编程基础和高级特性的关键参考资料,它们定义了Java程序的语法、语义以及虚拟机的行为。本压缩包包含了Java6至Java9的版本,涵盖了一系列重要的语言和虚拟机改进,对于Java开发者来...

    JAVA8虚拟机(jvm)规范_Chinese version.rar

    3. **类加载机制**:JVM遵循"加载(Loading)"、"验证(Verification)"、"准备(Preparation)"、"解析(Resolution)"和"初始化(Initialization)"的五步流程来加载类。双亲委派模型是类加载的一种策略,保证了类...

    jvm8虚拟机规范

    《JVM8虚拟机规范》深入解析 Java虚拟机(JVM)是Java程序的核心运行环境,它负责解析和执行Java字节码,为开发者提供了跨平台的运行支持。JVM8是Java 8版本的虚拟机规范,包含了对内存布局、数据类型、类文件格式...

    jvm解析编译过的class文件

    总的来说,JVM解析编译过的class文件是一个复杂的过程,涉及众多细节。开发者不仅要理解编译过程,还需要熟悉JVM的内部机制,才能更好地驾驭这个强大的平台。通过阅读相关博文,如给定的链接,可以进一步深入了解...

    Java语言规范和JVM虚拟机规范.zip

    Java语言规范和JVM虚拟机规范是理解Java编程基础及其执行机制的核心文档,它们由Oracle官方发布,确保了Java开发的准确性和一致性。本压缩包包含的文件详细阐述了Java编程语言的各个方面以及Java虚拟机(JVM)的工作...

    JVM规范与深入理解

    《JVM规范与深入理解》这个主题涵盖了Java虚拟机(Java Virtual Machine)的全面解析,旨在帮助开发者深入了解JVM的工作原理及其对程序性能的影响。在这个主题中,我们主要关注两个核心资源:周志明的《深入理解Java...

    Java学习题答案

    &lt;br&gt; }&lt;br&gt;}&lt;br&gt;}&lt;br&gt;本题在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,&lt;br&gt;两个x都匹配,就象在同时import java.util和java.sql两个包时直接声明Date一样)&lt;br&gt;本题主要考察对接口和类的...

    jbmp4.0 相关的几个包

    在这个场景下,`SimpleResolver`是解析和评估EL表达式的关键组件。 为了解决这个问题,你可能需要确保你的项目中正确包含了JUEL的相关库。这里提供的三个JAR文件——`juel.jar`, `juel-impl.jar`, `juel-engine.jar...

    jvm虚拟机规范 pdf 经典

    详细介绍了jvm虚拟机规范,很好 第一章引言 第二章 java概念 第三章 java虚拟机结构 第四章 class文件格式 第五章 常熟池解析 第六章 java虚拟机指令集 第七章 为java虚拟机编译 第八章 线程和锁 第九章 优化 第十章...

    JVM 完整深入解析.pdf

    方法区是JVM规范中的一部分,不同虚拟机实现时方法区的具体内容和管理方式可能会有所不同。 #### 运行时常量池 运行时常量池是方法区的一部分,它存放编译期生成的各种字面量和符号引用,并在类加载后被存放至方法...

    jvm 启动过程 JVM 原理

    5. **初始化**:最后,JVM执行类的初始化方法(&lt;clinit&gt;),这包括静态变量的初始化和静态代码块的执行。当且仅当类被首次主动使用时,才会进行初始化。 6. **执行**:一旦主类完成初始化,JVM的执行引擎开始运行...

    JVM调优篇.pdf

    虚拟机会保证子&lt;client&gt;方法执行之前,父类的&lt;client&gt;方法已经执行完毕,如果一个类中没有对静态变量赋值也没有静态语句块,那么编译器可以不为这个类生成&lt;client&gt;()方法。 类加载器 虚拟机设计团队把加载动作放到...

    JVM深入解析(JVM specification 和Sun的JVM的内存机制)

    - JVM规范定义了不同的内存区域,包括程序计数器、Java虚拟机栈、本地方法栈、堆和方法区(在Java 8之后变为元空间)。 - Java虚拟机栈:每个线程都有一个独立的栈,用于存储方法调用的状态,包括局部变量、操作数...

    JVM必知必会

    - **Bootstrap ClassLoader**:JVM级别的类加载器,负责加载`$JAVA_HOME/jre/lib`下的所有类库,不由Java实现,开发者无法直接操作。 - **Extension ClassLoader**:负责加载Java平台扩展功能的jar包,如`%JRE_HOME/...

    JVM之用Java解析class文件共10页.pdf.zi

    4. 解析:JVM解析类中的符号引用,将其转换为直接引用。这涉及类、接口、字段和方法的引用。 5. 初始化:最后,JVM执行类的初始化方法(&lt;clinit&gt;),对静态变量进行显式初始化。 用Java解析class文件,意味着我们...

    慢慢琢磨jvm 经典

    ### 深入解析JVM:Java虚拟机的精髓与挑战 #### JVM概览与重要性 JVM,即Java Virtual Machine(Java虚拟机),是Java程序员必须掌握的核心技术之一。初学者通常从简单的“HelloWorld”程序开始,逐渐接触更复杂的...

    jvm 启动过程

    5. **初始化**:这是最后一个阶段,JVM执行类构造器`&lt;clinit&gt;()`方法,初始化类变量和执行静态初始化块。 整个启动过程确保了Java应用程序的安全性和一致性,同时为后续的执行提供了必要的环境和资源。通过这种方式...

    深入JVM内核—原理、诊断与优化视频教程-2.JVM运行机制

    8. **类文件结构**:了解Java类文件的组成,如魔数、版本号、常量池、访问标志、类索引、接口索引集合、字段表集合、方法表集合和属性表集合,这些都是JVM解析和加载类的基础。 9. **动态类型语言支持**:JVM通过 ...

Global site tag (gtag.js) - Google Analytics