常见的常量入栈的操作码有 const push idc
1,const i l f d a分别表示 int long float double 对象引用
如:
- aconst_null 将null对象引用压入栈
- iconst_m1 将int类型-1压入栈
- iconst_1 将int类型的1压入栈
- lconst_3 将long类型的3压入栈
2,push
- bipush 8位带符号的整数压入栈
- sipush 16位带符号的整数压入栈
3,idc 将常量池中的项压入栈
局部变量中的装载值指令 load
格式和const差不多,如iload_1 表示从局部变量1中装载int类型值,对于从数组中装载则由两位字母+load表示 如:
- aaload表示从数组中装载引用类型
- iaload表示从数组中装载int类型
值存入局部变量指令 store
格式同上 如:
- aastore表示将引用类型值存入数组
- istore_0表示将int类型值存入局部变量0
通用指令
- popn 弹出栈顶n个字长的内容(n为1时省略)
- dupn 复制栈顶n个字长的内容(n为1时省略)
- dupn_xm 复制栈顶n个字长的内容,然后将复制的内容及原来弹出的n+m个字长压入栈 如:
- dup_x2表示复制栈顶1个字长的内容,然后将复制的内容及原来弹出的3个字长压入栈
- swap 交换栈顶两个字长的内容
类型转换指令
运算指令
- add表示加 。。。。 rem取余 neg取反
- iinc 将常量值加入到int中
- sh 移位操作
对象操作指令
- new 创建一个新对象
- checkcast 检查类型
- getfield 从对象中获取字段
- putfield 设置对象中字段的值
- getstatic 获取类中的静态字段
- putstatic 设置类中静态字段的值
- instanceof 判断类型匹配
方法调用及返回指令
- invokevirtual 根据运行时对像类型调用方法
- invokespecial 根据编译时的类型调用实例方法以及编译源码生成的init方法
- invokestatic 调用静态方法
- invokeinterface 调用接口方法
- return 返回指令 ireturn返回int return 返回void
分享到:
相关推荐
不过常用的jvm都有gc,而且大多数gc都使用类似的算法管理内存和执行收集操作。 在充分理解了垃圾收集算法和执行过程后,才能有效的优化它的性能。有些垃圾收集专用于特殊的应用程序。比如,实时应用程序主要是为了...
asmsupport是一个字节码操作类库,它能够让程序员非常简单的在动态创建和修改类,该框架是基于asm开发的,不同与asm的是,它避免了直接操作jvm指令,栈和局部变量。这个模块包含了asmsupport使用的第三方依赖包的...
到处运行(Write Once, Run Anywhere)”,这意味着开发者可以使用Java编写应用程序,并在支持Java的任何平台上无需重新编译即可运行,这得益于其独特的跨平台性,通过Java虚拟机(JVM)实现不同操作系统上的兼容。...
到处运行(Write Once, Run Anywhere)”,这意味着开发者可以使用Java编写应用程序,并在支持Java的任何平台上无需重新编译即可运行,这得益于其独特的跨平台性,通过Java虚拟机(JVM)实现不同操作系统上的兼容。...
到处运行(Write Once, Run Anywhere)”,这意味着开发者可以使用Java编写应用程序,并在支持Java的任何平台上无需重新编译即可运行,这得益于其独特的跨平台性,通过Java虚拟机(JVM)实现不同操作系统上的兼容。...
这个工具基于访问者模式实现,可以对字节码进行各种操作和分析。 ASM库提供了一套基于树API的类分析框架和几个预定义的类分析器,这些都被包含在`org.objectweb.asm.tree.analysis`包中。在这个包里,你可以找到...
Java运行环境(Java Runtime Environment,JRE)是一种用于执行Java程序的...例如,java.lang包提供了基本的类和对象操作,java.io包用于输入输出,java.util包包含了常用的数据结构和算法等等。开发人员在编写Java程
与 Swift 和 Objective-C 应该有良好的互操作性,并且可以轻松访问所有常用的库和框架。 最好的方法可能是转换为 Swift 并使用 Apple 的工具。 文献评论 Gal Dolber 的 ObjC 将 Clojure (JVM) 编译器修改为生成 ...
JVM = 类加载器 + 字节码校验器 + 解释执行器 JRE = JVM + API(应用程序变成接口); JDK = JRE + BIN(常用的工具命令) 面试题: JDK和JRE之间的区别? 1:分别表示的含义不同 jdk:java软件开发工具包 jre:...
9.2.1 常用map操作类 284 9.2.2 访问map键值 288 9.3 重点复习 291 9.4 课后练习 292 chapter10 输入输出 299 10.1 inputstream与outputstream 300 10.1.1 串流设计的概念 300 10.1.2 串流继承架构 ...
偏向锁:sparkles:Java IOJVM垃圾收集CMSG1ZGC元空间字节码操作JVM 调优分布式分布式算法PaxosRaftBFT分布式锁Redis 分布式锁分布式事务MySQL查询语句基本原理innodb 存储引擎:sparkles:缓存Redis底层原理开源框架...
几乎覆盖了所有常用的类,集合、多线程、并发包等。对源码尽我所能的进行了分析。 也对线程池,AQS的基础CLH 锁,提供了简易的实现,帮助理解。 jvm 将深入理解 jvm 的内容与oracle 官网的内容进行了总结,将其分为...
Java进行系统调试和监控的工具常用的package java.lang: 这个是系统的基础类,比如String等都是这里面的,这个package是唯一一个可以不用import就可 以使用的Package java.io: 这里面是所有输入输出有关的类,...
26. 简述逻辑操作(&,|,^)与条件操作(&&,||)的区别。 14 27. XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? 14 28. JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 15 29. ...
《Java开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第II卷,以开发...
作为最常用的 Java 软件开发套件(SDK),JDK 的第一手组件包括 Java 应用程序的加载器(简称为 Java),即由编译器(javac)创建的类文件的解释器,该编译器本身就是源代码。从原始格式到 Java 字节码的代码,以及...
作为最常用的 Java 软件开发套件(SDK),JDK 的第一手组件包括 Java 应用程序的加载器(简称为 Java),即由编译器(javac)创建的类文件的解释器,该编译器本身就是源代码。从原始格式到 Java 字节码的代码,以及...