JVM指令集介绍
转载自:http://glutinit.iteye.com/blog/1263446
延伸参考 JVM接收参数和方法调用
void spin() {
int i;
for (i = 0; i < 100; i++) {
; // Loop body is empty
}
}
编译后的代码如下 (与《Java虚拟机规范(java SE 7)》上看到的不一样,不知道是不是JDK版本的问题)
void spin();
Code:
0: iconst_0
1: istore_1
2: iload_1
3: bipush 100
5: if_icmpge 14
8: iinc 1, 1
11: goto 2
14: return
调用一个新的方法,就产生一个新的帧栈(Frame),如下图,在一个帧栈中,含有操作数栈(Operand Stack)和局部变量表(Local Variables),注意,此图只是用来表示在此期间发生的操作,并不直观的表示内存中的实际状态。
STEP1--> 0: iconst_0 
Code[]数组的第0行,表示把int型的0值压入操作数栈,注意,在局部变量表中,索引为0的位置存放的局部变量是指向调用当前方法的类实例的指针,即this指针
指令iconst_<i> 中的i表示的int 常量 −1、0、1、2、3、4、5
STEP2--> 1: istore_1 
从操作数栈中弹出一个int型的操作数(即常量0),然后将其放置在局部变量1号位置(0号位置已被this占据)
注意:物理上讲出栈后原来的数还在,只是程序告诉用户这个格子可以用了,我们就拿它当空格子用,下次入栈的时候写个新的数就把原来的数覆盖掉。凡是可以随便写的格子,不管里面原来有什么,都被认为是空格子。
STEP3--> 2: iload_1 
从局部变量表中获得1号位置变量的值,将其压入操作数栈
STEP4--> 3: bipush 100 
在操作数栈中加入int型的常量100
STEP5--> 5: if_icmpge 14 
该命令和《Java虚拟机规范》得到的不太一样,但起到的功能是一样的,可以查一下JVM 的在线文档,发现此命令的介绍如下:
if_icmpge pops the top two ints off the stack and compares them. If value2 is greater than or equal to value1, execution branches to the address (pc + branchoffset), where pc is the address of the if_icmpge opcode in the bytecode and branchoffset is a 16-bit signed integer parameter following the if_icmpge opcode in the bytecode. If value2 is less than value1, execution continues at the next instruction.
即将操作数栈中的两个int值弹出栈,然后比较它们,如果value2(即这里的0)大于或等于value1(即这里的100),则跳转至14行执行,否则就继续执行。很显然,这里0<100,所以继续执行下面的代码。
STEP6--> 8: iinc 1, 1 
该命令给局部变量表的1号位置的int值增加1,如图,原来的0变成了1
STEP7--> 11: goto 2
很显然,这一条的命令就是让下一条执行语句跳至2,即 iload_1,然后便继
续执行…
STEP8--> 14: return
当局部变量1号位置的值(即程序中的i)大于100后,便满足了5: if_icmpge 14这条语句的条件,程序跳到14,遇到了return命令,该方法完成
JVM指令集介绍的更多相关文章
- JVM监控工具介绍
JVM监控工具介绍 VisualVM是一种集成了多个JDK命令行工具的可视化工具,它能为您提供强大的分析能力.所有这些都是免费的!它囊括的命令行工具包括jps,jstat,jmap,jinfo,jst ...
- JVM指令集(指令码、助记符、功能描述)(转)
JVM指令集(指令码.助记符.功能描述) 指令码 助记符 功能描述 0x00 nop 无操作 0x01 aconst_null 指令格式: aconst_null 功能描述: null进栈. 指令 ...
- JVM指令集
指令集,其实就是一系列指令的集合.例如我们需要给一个局部变量赋予1这个值,即这个动作:int a = 1; 在我们看来,这很简单,但对于机器来说需要很多个动作.所以Java虚拟机指令集就是将这些常用的 ...
- JVM指令集(指令码、助记符、功能描述)
JVM指令集(指令码.助记符.功能描述) 指令码 助记符 功能描述 0x00 nop 无操作 0x01 aconst_null 指令格式: aconst_null 功能描述: null进栈. 指令 ...
- 【转+存】JVM指令集
jvm指令集: 转载地址:https://www.cnblogs.com/yaoyinglong/p/4300447.html 一.未归类系列A 此系列暂未归类. 指令码 助记符 ...
- 基于栈的指令集与基于寄存器的指令集的区别,JVM指令集实例
现代JVM在执行Java代码的时候,通常都会将解释执行与编译执行两者结合起来 所谓解释执行,就是通过解释器来读取字节码,遇到相应的指令就去执行该指令. 所谓编译执行,就是通过即时编译器(Just In ...
- JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jsta
JVM监控工具介绍 jstack - 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程 ...
- JAVA 文件编译执行与虚拟机(JVM)简单介绍
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytpo3 java程序的内存分配 JAVA 文件编译执行与虚拟机(JVM)介绍 ...
- Java内存泄露监控工具:JVM监控工具介绍
本文将对JVM监控工具jstack, jconsole, jinfo, jmap, jdb, jstat进行详细的介绍,具体内容请看下文 Sun JDK监控和故障处理工具 名称 主要作用 jps JV ...
随机推荐
- ### Cause: org.apache.ibatis.binding.BindingException: Parameter 'name' not found. Available parameters are [arg1, arg0, param1, param2]
org.apache.ibatis.exceptions.PersistenceException: ### Error updating database. Cause: org.apache.ib ...
- 计算机基础,Python基础--变量以及简单的循环
一.计算机基础 1.CPU 相当于人体的大脑,用于计算处理数据. 2.内存 用于存储数据,CPU从内存调用数据处理计算,运算速度很快. PS:问:既然在内存里的数据CPU运算速度快,为什么计算机不全 ...
- c# IPC实现本机进程之间的通信
IPC可以实现本地进程之间通信.这种用法不是太常见,常见的替代方案是使用wcf,remoting,web service,socket(tcp/pipe/...)等其他分布式部署方案来替代进程之间的通 ...
- hdu1072 Nightmare---BFS
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1072 题目大意: 在n×m的地图上,0表示墙,1表示空地,2表示人,3表示目的地,4表示有定时炸弹重 ...
- Java面试题—初级(1)
1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致. 2.Java有 ...
- Java调用SQL脚本执行的方案
在Java中调用SQL脚本的方式有多种,在这里只记录一种自己常用的方式,个人觉得挺实用方便的. 运用ScriptRunner这个类. import org.apache.ibatis.io.Resou ...
- scrapy爬取全部知乎用户信息
# -*- coding: utf-8 -*- # scrapy爬取全部知乎用户信息 # 1:是否遵守robbots_txt协议改为False # 2: 加入爬取所需的headers: user-ag ...
- ashx页面怎么调用Handler的Session
aspx里面直接可以用Session["Name"]进行赋值和取值,ashx中就得继承接口IRequiresSessionState.然后使用! 实现: public class ...
- linux samba服务配置
1.下载 wget+rpm或yum install 2.配置/etc/samba/smb.conf cat smb.conf | grep setsebool 执行终端打印出来的字符串 setsebo ...
- [bzoj 1293] [SCOI2009] 生日礼物
传送门(bzoj) 传送门(luogu) 题目: Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应 ...