jvm理论-字节码指令案例】的更多相关文章

案例1 public class Demo { public int calc(){ int a=100; int b=200; int c=300; return(a+b)*c; } public static void main(String[] args){ Demo demo = new Demo(); demo.calc(); } } 分析 javap生成 javac Demo.java javap -v Demo.class…
Java虚拟机的指令由一个字节长度的.代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成. 基本数据类型 1.除了long和double类型外,每个变量都占局部变量区中的一个变量槽(slot),而long及double会占用两个连续的变量槽. 2.大多数对于boolean.byte.short和char类型数据的操作,都使用相应的int类型作为运算类型. 加载和存储指令 1.将一个局部变量加载到操作栈:iload…
  前言简介   前文已经对虚拟机进行过了简单的介绍,并且也对class文件结构,以及字节码指令进行了详尽的说明 想要了解JVM的运行机制,以及如何优化你的代码,你还需要了解一下,java编译器到底是如何编译你的代码的 本文不是从最底层的编译原理讲解 本文是针对java代码,去查看归纳总结编译器的结果行为,从而直观的感受到字节码指令集 也就是说本文的内容,主要针对的是使用javap 查看字节码文件中方法的code属性中的字节码内容 让你从java代码  class文件格式,以及字节码指令集 进行…
JVM总括三-字节码.字节码指令.JIT编译执行 目录:JVM总括:目录 java文件编译后的class文件,java跨平台的中间层,JVM通过对字节码的解释执行(执行模式,还有JIT编译执行,下面讲解),屏蔽对操作系统的依赖.一个字节(8位)可以储存256中不同的指令,这样的指令就是字节码,java所有指令有200个左右,这些指令组成了字节码文件(.class). 一.字节码的主要指令: .class文件里面的十六进制文件(如:图一),其中CAFE BABE是标志这个文件为java的编译后的文…
一.字节码指令的含义 Java字节码指令由一个字节长度的,代表某种特定操作含义的数字(操作码)以及其后的零至多个代表此操作所需参数(操作数).此外字节码指令是面向操作数栈的,这里操作数栈在功能上对应实体机的寄存器但是结构上有所区别. 字节码指令的作用简单的来说就是jvm将我们写好的代码翻译成字节码指令存入code中,然后被虚拟机执行引擎执行的. 二.字节码指令的特点 1.大多数指令是包含类型信息的,如:Iload.fload指令,前面的I和f代表int类型和float类型. 2.也有一些不包含类…
Java是解释执行的.包含动态链接的特性.都给解析或执行期间提供了非常多灵活扩展的空间.面向对象语言的继承.封装和多态的特性,在JVM中是怎样进行编译.解析,以及通过字节码指令怎样确定方法调用的版本号是本文例如以下要探讨的主要内容.全文环绕一个多态的简单举例来看在JVM中是怎样实现的. 先简介几个概念.对于字节码运行模型及字节码指令集的相关概念能够參考之前的一篇介绍http://blog.csdn.net/lijingyao8206/article/details/46562933. 一.方法调…
JVM学习笔记——字节码指令 字节码 0与 1是计算机仅能识别的信号,经过0和1的不同组合产生了数字之上的操作.另外,通过不同的组合亦产生了各种字符.同样,可以通过不同的组合产生不同的机器指令.在不同的时代,不同的厂商,机器指令组成的集合是不同的.但毕竟CPU是底层基础硬件,指令集通常以扩展兼容的方式向前不断演进.而机器码是离CPU指令集最近的编码,是CPU可以直接解读的指令,因此机器码肯定是与底层硬件系统耦合的. 问题:如果某个程序员因为不同的硬件平台需要编写多套代码,这是十分令人崩溃的.Ja…
JVM 字节码指令手册 - 查看 Java 字节码 jdk 进行的编译生成的 .class 是 16 进制数据文件,不利于学习分析.通过下命令 javap -c Demo.class > Demo.txt 或者其他方式可反汇编,得到字节码文件 一.JVM 指令分类 (1)操作数栈 过程 符号 变量到操作数栈 iload, iload_, lload, lload_, fload, fload_, dload, dload_, aload, aload_ 操作数栈到变量 istore, istor…
早上看了Class类文件结构,晚上继续来看字节码指令,毕竟谁也不是一步登天的(说白了还是穷); 字节码指令 Java虚拟机的指令由一个字节长度的.代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成. 由于限制了Java虚拟机操作码的长度为一个字节(即0-255),这意味着指令集的操作码总数不可能超过256条. 大多数的指令都包含了其操作所对应的数据类型信息.例如: iload指令用于从局部变量表中加载int型的数…
1. 场景的产生 先来看下下面代码展示的两个场景 @Testvoid testIPP() { int i = 0; for (int j = 0; j < 10; j++) { i = i++; System.out.println(i); }}@Testvoid testPPI() { int i = 0; for (int j = 0; j < 10; j++) { i = ++i; System.out.println(i); }} 首先两个方法的开始都定义了一个int变量 i,并初始化…