`
ccr1988
  • 浏览: 34666 次
  • 性别: 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学习题答案

    &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;本题主要考察对接口和类的...

    jvm虚拟机规范 pdf 经典

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

    java实现微信公众号源码-itstack-demo-jvm:本专题主要介绍如何通过java代码来实现JVM的基础功能(搜索解析class文件

    本专题主要介绍如何通过java代码来实现JVM的基础功能(搜索解析class文件、字节码命令、运行时数据区等),从而让java程序员通过最熟知的java程序,学习JVM是如何将java程序一步步跑起来的,按照 《java虚拟机规范》...

    JVM自动内存管理机制

    Java自动内存管理机制包含两部分:内存分配和内存回收,要想理解内存分配和回收的机制,则需要了解下Java内存区域(Java运行时数据区),这篇随笔将按照下面的线索进行逐步解析:1.Java运行时数据区2.对象“已死”的...

    kdl4j:JVM的KDL解析器

    它已经过了广泛的测试,但是它实现的规范仍在不断变化。用法解析中 final KDLParser parser = new KDLParser ();final KDLDocument documentFromString = parser . parse( " node_name \" arg \" " )// ORfinal ...

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    9.11.3 缓存、规范映射和临终清理 9.12 一个模拟:“heap of fish” 9.12.1 分配鱼 9.12.2 设置引用 9.12.3 垃圾收集 9.12.4 压缩堆 9.13 随书光盘 9.14 资源页 第10章 栈和局部变量操作 ...

    解析Java类和对象的初始化过程

    本文主要对类和对象初始化全过程进行分析,通过一个实际问题引入,将源代码转换成JVM字节码后,对JVM执行过程的关键点进行全面解析,并在文中穿插入了相关JVM规范和JVM的部分内部理论知识,以理论与实际结合的方式...

    Java基础面宝典

    解析:虽然不知道什么是跨平台也可以使用Java语言...主要得益于Java虚拟机(JVM),JVM解释器在运行Java应用时根据当前平台进行解释,解释成符合当前平台规范的机器码,所以可以实现同样的应用在不同平台上都能运行。

    cafebabe:Java类文件解析器

    目标是完全实现JVM规范第4章中描述的所有内容,该内容基本上涵盖了.class文件的解析和验证。 为什么将这个项目称为cafebabe? 因为任何有效的类文件中的前4个字节都是值为0xCAFEBABE的魔术标识符。

    新版Android开发教程.rar

    � Google 提供了一套 Java 核心包 (J2SE 5,J2SE 6) 的有限子集,尚不承诺遵守 Java 任何 Java 规范 , 可能会造 成J ava 阵营的进一步分裂。 � 现有应用完善度不太够,需要的开发工作量较大。--------------------...

    DSL领域定制语言实战

    《领域专用语言实战》基于一系列JVM语言(Java、Ruby、Groovy、Scala和Clojure),分析了它们在实现DSL中的优劣势,同时也给出了丰富的示例。如果你是一位架构师,希望设计出极具表现力的API,让它既能满足领域用户...

    godata:用Go编写的OData实现

    这些要求使用CLR或JVM,并且在许多用例中都显得过高。 通过使用Go,我们旨在提供轻量级,快速且并行的OData服务。 通过希望向OData请求公开通用接口,我们希望使任何后端都能通过OData API公开自身,而只需付出最小...

    达内java培训目录

    Java语言基础 算法基础、常用数据结构、企业编程规范。 掌握常见的数据结构和实用算法;培养良好的企业级编程习惯。 Java面向对象 面向对象特性:封装、继承、多态等,面向对象程序设计,基础设计模式等。 掌握面向...

    leetcode题库-JavaNotes:技术面试必备基础知识、算法、数据库、Java、后端、操作系统、计算机网络、系统设计、编程规范

    leetcode题库 一份关于cs向的学习目录 学习目录包含 Java 计算机系统 网络 编码规范 数据库 算法 设计模式与面向对象(oo) 架构设计 [TDD和DDD] 网络安全 ...JVM完善,jdk源码解析 设计模式,重构设计

    SCUBA:简单的可自定义字节码分析工具

    为了摆脱害怕理解JVM,Java语言规范和字节码工件的恐惧,并且使应用程序产生如何生成可扩展,可重用和可配置的软件系统。实验SCUBA评估ASM和BCEL框架是一件令人愉快的事情,因为我进行了一些实验来评估和相对比较...

    Itstack

    本专题主要介绍如何通过java代码来实现JVM的基础功能(搜索解析类文件,字节码命令,运行时数据区等),从而让java程序员通过最直接的java程序,学习JVM是如何将java程序一步步跑起来的,按照《 java虚拟机规范》与...

    enkan:一个简单明了的Java框架

    在不重新启动JVM的情况下重新加载类 跟踪中间件的执行 警报配置错误 操作简便 启动服务器速度很快。 (〜3秒) 重置应用程序非常快。 (〜1秒) REPL上中间件的运行时更改谓词 要求 Java8或更高 Java EE 7规范 ...

    Java开发手册(阿里巴巴).docx

    次年,发布 36 万字的配套详解图书《码出高效》,本书 秉持“图胜于表,表胜于言”的理念,深入浅出地将计算机基础、面向对象思想、JVM 探源、数据 结构与集合、并发与多线程、单元测试等知识客观、立体地呈现出来。...

    learning-notes:学习一些东西

    learning-notes分布式1.Lambda表达式Java基础JVM设计模式数据库并发微服务消息队列1.RabbitMq缓存1.Redis集群方式(主从复制,哨兵模式和Redis-Cluster集群)2.Redis内存回收机制3.Redis笔记4.Redis Cluster原理5....

Global site tag (gtag.js) - Google Analytics