《深入Java虚拟机》笔记:指令集

 
指令 含义
iconst_m1 把int型常量-1压入栈中
iconst_0 把int型常量压入栈中
fconst_1 把float型常量1压入栈中
lconst_2 把long型常量2压入栈中
dconst_3 把double型常量3压入栈中
bipush byte1 把byte1转换成int型压入栈中
sipush byte1,byte2 把byte1,byte2组成的short转换成int压入栈中
aconst_null 把空对象压入栈中
ldc indexbyte1 把常量池中指定下标的一个字长压入栈
ldc_w indexbyte1,indexbyte2 把常量池中指定下标的一个字长压入栈
ldc2_w indexbyte1,intexbyte2 把常量池中指定下标的两个字长压入栈
pop 弹出栈顶的一个字
pop2 弹出栈顶的两个字
swap 交换栈顶的两个字
dup 复制栈顶的一个字
dup2 复制栈顶的两个字
dup_x1 复制一字,并将弹出的两字压栈
dup_x2 复制一字,并将弹出的三字压栈
dup2_x1 复制两字,并将弹出的三字压栈
dup2_x2 复制两字,并将弹出的四字压栈
iload vindex 将位置vindex的int型局部变量压入栈
iload_0 将位置0的int型局部变量压入栈
fload vindex 将位置vindex的float型局部变量压入栈
fload_0 将位置0的float型局部变量压入栈
lload vindex 将位置vindex的long型局部变量压入栈
lload_0 将位置0的long型局部变量压入栈
dload vindex 将位置vindex的double型局部变量压入栈
dload_0 将位置0的double型局部变量压入栈
aload vindex 将位置vindex的对象引用局部变量压入栈
aload_0 将位置0的对象引用局部变量压入栈
istore vindex 弹出int型,存储在vindex处的局部变量
istore_0 弹出int型,存储在0处的局部变量
fstore vindex 弹出float型,存储在vindex处的局部变量
fstore_0 弹出float型,存储在0处的局部变量
lstore vindex 弹出long型,存储在vindex处的局部变量
lstore_0 弹出long型,存储在0处的局部变量
dstore vindex 弹出double型,存储在vindex处的局部变量
dstore_0 弹出double型,存储在0处的局部变量
astore vindex 弹出对象引用类型,存储在vindex处的局部变量
astore_0 弹出对象引用类型,存储在0处的局部变量
wide iload byte1,byte2 wide能把原来的一字节的参数变成处理两字节
i2l 把int类型转换成long类型,其他类似,不再举例
iadd 弹出两个int型,相加后结果压入栈
ladd 弹出两个long型,相加后结果压入栈
iinc vindex,const 把常量const与位于vindex的局部变量相加
wide iinc index1,intdex2,const1,const2 把常量与位于vindex1,vindex2的局部变量相加
isub 弹出两个int型,相减后lint型结果压入栈
lsub 弹出两个long型,相减后long型结果压入栈
imul 弹出两个int型,相乘后int型结果压入栈
lmul 弹出两个long型,相乘后long型结果压入栈
idev 弹出两个int型,相除后int型结果压入栈
ldev 弹出两个long型,相除后long型结果压入栈
irem 弹出两个int型,取余后int型结果压入栈
lrem 弹出两个long型,取余后long型结果压入栈
ineg 弹出一个int型,取反后int型结果压入栈
lneg 弹出一个long型,取反后long型结果压入栈
ishl 向左对int型值进行移位操作(long类似)
ishr 向右对int型值进行算术移位操作
iushr 向右对int型值进行逻辑移位操作
iand 对两个int类型值进行逻辑与运算(long类似)
ior 对两个int类型值进行逻辑或运算
ixor 对两个int类型值进行逻辑异或运算
fadd 弹出两个float型,相加后float型结果压入栈
fsub 弹出两个float型,相减后float型结果压入栈
fmul 弹出两个float型,相乘后float型结果压入栈
fdiv 弹出两个float型,相除后float型结果压入栈
frem 弹出两个float型,取余后float型结果压入栈
new indexbyte1,indexbyte2 在堆中创建一个新的对象,将其压入栈中
putfield indexbyte1,intdebyte2 设置对象字段的值,值和对象引用都从栈获取
getfield indexbyte1,indexbyte2 将对象字段压入栈,对象引用从栈中获取
putstatic indexbyte1,indexbyte2 设置类静态变量的值,从栈中获取
getstatic indexbyte1,indexbyte2 将静态变量压入栈
checkcast indexbyte1,indexbyte2 如果栈中的引用不是指定位置的类,则抛出异常
instanceof indexbyte1,indexbyte2 同上,不过是往结果中压入true或false
newarray atype 从栈中弹出长度,分配atype类型的数组
anewarray indexbyte1,intdexbyte2 从栈中取长度,index取类型
multianewarray index1,index2,dimensions 分配多维数组
arraylength 从栈中弹出一个引用,并将其长度压入栈
baload 从栈中取数组引用和下标,把对应boolean压入栈
caload 同上,char
saload 同上,short
iaload 同上,int
laload 同上,long
faload 同上,folat
daload 同上,double
aaload 同上,array
bastore

将byte或boolean类型的值value、索引index、数组引用arrayref弹出栈,赋值为arrayref[index]=value

其他类型同上

ifeq branchbyte1,branchbyte2 从栈中弹出int型,为0则跳转到指定的分支执行
ifne branchbyte1,branchbyte2 同上,不为0则跳转到指定的分支执行
iflt branchbyte1,branchbyte2 同上,如果小于0,则跳转到指定的分支执行
ifle branchbyte1,branchbyte2 同上,如果小于等于0,则跳转到指定的分支执行
ifgt branchbyte1,branchbyte2 同上,如果大于0,则跳转到指定的分支执行
ifge branchbyte1,branchbyte2 同上,如果大于等于0,则跳转到指定的分支执行
if_icmpeq branchbyte1,branchbyte2 栈中弹出两个int,如果的一个等于第二个,跳转
if_icmpme branchbyte1,branchbyte2 栈中弹出两个int,如果的一个不等于第二个,跳转
if_icmplt branchbyte1,branchbyte2 栈中弹出两个int,如果的一个小于第二个,跳转
if_icmple branchbyte1,branchbyte2 栈中弹出两个int,如果的一个小于等于第二个,跳转
if_icmpgt branchbyte1,branchbyte2 栈中弹出两个int,如果的一个大于第二个,跳转
if_icmpge branchbyte1,branchbyte2 栈中弹出两个int,如果的一个大于等于第二个,跳转
lcmp 从栈中弹出两个long,把结果-1、0、1放入栈
fcmpg 从栈中弹出两个float,把结果-1、0、1放入栈
fcmpl 从栈中弹出两个float,把结果-1、0、1放入栈
dcmpg 从栈中弹出两个double,把结果-1、0、1放入栈
dcmpl 从栈中弹出两个double,把结果-1、0、1放入栈
ifnull branchbyte1,branchbyte2 从栈中弹出,如果是null就跳到分支
ifnonnull branchbyte1,branchbyte2 从栈中弹出,如果不是null就跳到分支
 
 

《深入Java虚拟机》笔记:指令集 (转)的更多相关文章

  1. java虚拟机笔记-1

    java虚拟机学习笔记 Java技术的核心就是Java虚拟机,因为所有的Java程序都在虚拟机上运行.Java程序的运行需要Java虚拟机.Java API和Java Class文件的配合.Java虚 ...

  2. Java虚拟机笔记(五):JVM中对象的分代

    为什么要分代 为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用, ...

  3. Java虚拟机笔记(四):垃圾收集器

    前言 前一篇文章介绍了内存的垃圾收集算法,现在介绍下内存回收的具体实现--垃圾收集器. 由于Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商,不同版本的虚拟机所提供的垃圾收集 ...

  4. Java虚拟机笔记(三):垃圾收集算法

    一.标记-清除(Mark-Sweep)算法 标记清除算法是最基础的收集算法,其他收集算法都是基于这种思想. 标记清除算法分为“标记”和“清除”两个阶段:首先标记出需要回收的对象,标记完成之后统一清除对 ...

  5. Java虚拟机笔记(二):GC垃圾回收和对象的引用

    为什么要了解GC 我们都知道Java开发者在开发过程中是不需要关心对象的回收的,因为Java虚拟机的原因,它会自动回收那些失效的垃圾对象.那我们为什么还要去了解GC和内存分配呢? 答案很简单:当我们需 ...

  6. Java虚拟机笔记(一):类加载机制

    一.概述 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 二.类加载的生命周期 类从被加载到 ...

  7. 深入理解java虚拟机笔记Chapter12

    (本节笔记的线程收录在线程/并发相关的笔记中,未在此处提及) Java内存模型 Java 内存模型主要由以下三部分构成:1 个主内存.n 个线程.n 个工作内存(与线程一一对应) 主内存与工作内存 J ...

  8. Java虚拟机笔记 – JVM 自定义的类加载器的实现和使用2

    1.用户自定义的类加载器: 要创建用户自己的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的findClass(String name)方法即可,该方法根据参数指定类的名 ...

  9. 深入理解Java虚拟机笔记

    1. Java虚拟机所管理的内存 2. 对象创建过程 3. GC收集 4. HotSpot算法的实现 5. 垃圾收集器 6. 对象分配内存与回收细节 7. 类文件结构 8. 虚拟机类加载机制 9.类加 ...

  10. 深入理解java虚拟机笔记之一

    Java的技术体系主要有支撑java程序运行的虚拟机,提供各开发领域接口支持Java API,java编程语言及许多第三方java框架( 如Spring,Structs等)构成. 可以把Java程序设 ...

随机推荐

  1. POJ 2184 Cow Exhibition 01背包

    题意就是给出n对数 每对xi, yi 的值范围是-1000到1000 然后让你从中取若干对 使得sum(x[k]+y[k]) 最大并且非负   且 sum(x[k]) >= 0 sum(y[k] ...

  2. Swift - 自定义函数规则说明

    1,无返回值的函数 1 2 3 func test(name:String){   } 2,返回一个返回值 1 2 3 func test(name:String) -> Bool{     r ...

  3. ubuntu12.10下arm-linux-gcc交叉编译环境的搭建

    交叉编译环境搭建的原因:通俗上讲,因为嵌入式系统可用资源比较少:几十M的ARM 二三百M的flash相对我们的pc机来说资源真的没法比.所以,为了解决这种局面就将PC机等作为主机,搭建开发环境,进行编 ...

  4. QSqlDatabase::addDatabase第一次运行的时候,生成SQLite文件的同时会产生一个默认连接

    QSqlDatabase::addDatabase第一次运行的时候,生成SQLite文件的同时会产生一个默认连接: QSqlDatabase database = QSqlDatabase::addD ...

  5. 如何关闭android studio开发环境自动保存

    使用DW习惯了现在转到学习开发android,请问怎样关闭android studio的自动保存功能,然后按ctrl+s进行保存,因为有时候代码不想让其保存,他也自动保存了. File -> S ...

  6. TCP连接的建立(二)

    被动打开 SYN cookies TCP协议开辟了一个比較大的内存空间请求连接队列来存储连接请求块,当SYN请求不断添加,请求连接数目到达上限时,会致使系统丢弃SYN连接请求.SYN cookies技 ...

  7. virus.win32.parite.H病毒的查杀方法

    virus.win32.parite.H病毒的查杀方法 昨天电脑中了virus.win32.parite.H病毒,搞了2个多小时最终搞定了.以下记录下我的解决方法. 第一步:下载Win32.Parit ...

  8. 当Scheduler拿不到url的 时候,不能立即退出

    在webmagic的多线程抓取中有一个比较麻烦的问题:当Scheduler拿不到url的 时候,不能立即退出,需要等到没抓完的线程都运行完毕,没有新url产生时,才能退出.之前使用Thread.sle ...

  9. MVC Json 回报

    /// <summary> /// 获取评论列表 /// </summary> /// <param name="pageIndex">< ...

  10. SPOJ DISUBSTR(字符串hash)

    传送门:DISUBSTR 题意:给定一个字符串,求不同子串个数. 分析:由于数据较小,直接枚举长度为1,2...n的所有子串进行hash即可,复杂度(O(n^2)),后缀数组才是正解(O(nlogn) ...