java字节码指令简介(仅了解)
- 1.1)将一个局部变量加载到操作数栈:iload, iload_n, lload, lload_n, fload, fload_n, dload, dload_n, aload, aload_n;
- 1.2)将一个数值从操作数栈存储到局部变量表:istore, istore_n, lstore_, lstore_n, fstore, fstore_n, dstore_, dstore_n, astore, astore_n;
- 1.3)将一个常量加载到操作数栈: bipush, sipush, ldc, ldc_w, ldc2_w, aconst_null, iconst_m1, iconst_i, lconst_l, fconst_f, dconst_d;
- 1.4)扩充局部变量表的访问索引的指令:wide;
- 2.1)加法指令:iadd, ladd, fadd, dadd;
- 2.2)减法指令:isub, lsub, fsub, dsub;
- 2.3)乘法指令:imul, lmul, fmul, dmul;
- 2.4)除法指令:idiv, ldiv, fdiv, ddiv;
- 2.5)求余指令:irem, lrem, frem, drem;
- 2.6)取反指令:ineg, lneg, fneg, dneg;
- 2.7)位移指令:ishl, ishr, iushr, lshl, lshr, lushr;
- 2.8)按位或指令:ior, lor;
- 2.9)按位与指令:iand, land;
- 2.10)按位异或指令:ixor, lxor
- 2.11)局部变量自增指令:iinc;
- 2.12)比较指令:dcmpg, dcmpl, fcmpg, fcmpl, lcmp;
- 1.1)int到long, float或double;
- 1.2)long到float或double;
- 1.3)float到double;
- r1)如果浮点值是NaN, 那转换结果是int 或 long类型的0;
- r2)如果浮点值不是无穷大的话,浮点值使用 向零舍入模式取整,获得整数值v,且v在目标类型T(int或double)的表示范围内;
- r3)否则,根据v的符号,转换为T所能表示的最大或最小整数;
- i1)创建类实例的指令:new;
- i2)创建数组的指令:newarray, anewarray, multianewarray;
- i3)访问类字段(static字段或称为类变量)和实例字段的指令: getfield, putfield, getstatic, putstatic;
- i4)把一个数组元素加载到操作数栈的指令: baload, caload, saload, iaload, laload, faload, daload, aaload;
- i5)将一个操作数栈的值存储到数组元素中的指令: bastore, castore, sastore, iastore, fastore, dastore, aastore;
- i6)取数组长度指令: arrayLength;
- i7)检查类实例类型的指令: instanceof, checkcast;
- 1.1)将一个或两个元素出栈: pop,pop2;
- 1.2)复制栈顶一个或两个数值并将复制值或双份的复制值重新压入栈顶:dup, dup2, dup_x1, dup2_x1, dup_x2, dup2_x2;
- 1.3)将栈最顶端的两个数值交换: swap;
- 1.1)invokevirtual:用于调用对象的实例方法, 根据对象的实际类型进行分派(虚方法分派),这也是java中最常见的方法分派方式;
- 1.2)invokeinterface:用于调用接口方法, 它会在运行时搜索一个实现了这个接口方法的对象,找出合适的方法进行调用;
- 1.3)invokespecial:用于调用一些需要特殊处理的实例方法, 包括实例初始化方法,私有方法和父类方法;
- 1.4)invokestatic:用于调用类方法(static方法);
- 1.5)invokedynamic:用于在运行时动态解析出调用点限定符所引用的方法,并执行该方法,前面4条调用指令的分派逻辑都固化在 java 虚拟机内部,而 invokedynamic指令的分派逻辑是由用户所设定的引导方法决定的;
- 2.1)ireturn, lreturn, freturn, dreturn, areturn,另外还有一条return 指令供声明为 void 的方法,实例初始化方法以及类和接口的类初始化方法使用;
// 测试 synchronized关键字的虚拟机指令集(字节码指令)
public class SynchronizedTest {public void func(CandyMachine machine) {synchronized (machine) {machine.count++;}}class CandyMachine {private int count = 0;public int getCount() {return count;}}
}
- type1)将输入的java虚拟机代码在加载或执行时翻译成另一种虚拟机的指令集;
- type2)将输入的java虚拟机代码在加载或执行时翻译成宿主机CPU 的本地指令集, 即JIT代码生成技术(jit==just in time 即时)
java字节码指令简介(仅了解)相关推荐
- Java字节码指令简介
本文是<深入理解Java虚拟机>中第六章的读书笔记. 1.概述 在Class文件中,Java方法里的方法体,也就是代表着一个Java源码程序中程序的部分存储在方法表集合的Code属性中.存 ...
- c++byte数组和文件的相互转换_5分钟系列之Java类文件结构(三、字节码指令简介)...
字节码指令简介1字节码与数据类型2加载和存储指令3运算指令4类型转换指令5对象创建与访问指令6操作数栈管理指令7 控制转移指令8方法调用和返回指令9异常处理指令10同步指令公有设计和私有实现Class ...
- JVM004_字节码指令简介
字节码指令简介 Java虚拟机指令由操作码(Opcode)和跟随其后的零至多个操作数(Operand)组成. 操作码:一个字节长度的,代表某种特定操作含义的数字. 操作数:操作码需要的参数. 字节码与 ...
- 【JVM源码解析】模板解释器解释执行Java字节码指令(上)
本文由HeapDump性能社区首席讲师鸠摩(马智)授权整理发布 第17章-x86-64寄存器 不同的CPU都能够解释的机器语言的体系称为指令集架构(ISA,Instruction Set Archit ...
- 深入理解JVM虚拟机(五):字节码指令简介
Java 虚拟机的指令由一个字节长度的.代表着某种特定操作含义的数字(称为操作码)以及跟随其后的零至多个代表此操作所需参数(操作数)而构成.由于 Java 虚拟机采用面向操作数栈而不是寄存器的架构,所 ...
- JAVA字节码指令iload_n为什么只有0到3?
点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 来源:r6d.c ...
- 常见 Java 字节码 指令 助记符
转自: 常见java字节码 有时候为了能理解JVM对程序所做的优化等,需要查看程序的字节码,因此知道了解一些常见的指令集很重要! 指令码 助记符 说明 0x00 nop 什么都不做 0x01 acon ...
- Java字节码指令大全
Java二进制指令代码解析 Java源码在运行之前都要编译成为字节码格式(如.class文件),然后由ClassLoader将字节码载入运行.在字节码文件中,指令代码只是其中的一部分,里面还记录了字节 ...
- java 数字表示什么意思是什么,读取Java字节码指令:数字是什么意思?
Java类文件和字节码 Java类文件(字节码文件)由不同的组件组成: >幻数:0xCAFEBABE >类文件格式的版本:类文件的次要版本和主要版本 >常量池:类的常量池 >( ...
最新文章
- rediscluster全局数据_设计数据密集型应用(6-7):分片、事务
- Setup Factory打包时实现第三方DLL文件的注册
- 前端学习(1678):前端系列实战课程之声明和创建游戏地图
- python中读取文件编码_[转载]python中使用文件的读取编码问题
- Install deepin-wine QQ inside a docker image in Ubuntu 20.04
- ubuntu18下查看opencv版本、多版本之间的共存,切换、下载地址
- 如何在DOS命令窗口中进入D盘?
- Navicat 11 Premium中文破解版使用心得
- shal+php,学习笔记---PHP中几种加密算法(MD5,shal,base64_encode等)
- Eclipse打印Java的char默认值,出现方框原因
- 阿里巴巴2018秋招面经之前端岗(1~5面)
- 西安电子科技大学通院811电院821考研上岸经验分享(一)
- Java实现 LeetCode 109 有序链表转换二叉搜索树
- 武汉理工大学c语言pta选择题答案,武汉理工大学c语言实验及答案.doc
- IP地址大全之IPV4版
- python正则检验_Python 检测生僻字
- HIT CSAPP大作业论文
- TCP粘包、断包处理
- depot_tools_tutorial
- 如何基于Arduino开发板使用APDS9960 RGB和手势传感器
热门文章
- 【CC November Challenge 2012】Arithmetic Progressions【分块】【FFT】
- 双指针--Codeforces Round #645 (Div. 2) d题
- [AGC026D]Histogram Coloring
- P3301 [SDOI2013]方程
- JavaWeb --第一章Web基本概念
- P5268-[SNOI2017]一个简单的询问【莫队】
- jzoj3319-[BOI2013]雪地踪迹【bfs】
- P1850-换教室【数学期望,dp,Floyd】
- 纪中2019(上)游记+总结
- 【2018.3.17】模拟赛之三-ssl1863jzoj1367 俄罗斯方块【模拟】