- 浏览: 270304 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (251)
- 面试基础 (9)
- java基础 (40)
- 调试配置 (10)
- 转载文章 (4)
- 心灵鸡汤 (8)
- java工具 (6)
- CSS学习 (7)
- css案例 (2)
- 经济 (1)
- 小节惹的祸 (1)
- 实例心得 (21)
- 数据库 (7)
- 有用的代码 (17)
- Struts (3)
- Hibernate (5)
- Spring (3)
- java xml (7)
- Java Reflection API (1)
- 网络配置 (4)
- SSH (8)
- java开源框架 (13)
- ajax (4)
- swing (1)
- 设计模式 (1)
- 未主流组件 (7)
- WebService (6)
- 20111019 (1)
- xiao清讲课笔笔~~~UML (0)
- 笔记 (2)
- SOAP (9)
- 第一天遇到的问题 (1)
- Java Card (3)
- 面试 (18)
- Java (17)
- JNLP 集群 (0)
- java 面试 (3)
最新评论
-
ap0406708:
138XXXXXXXX
webserivce spring-ws 安全 -
yezhuzhe:
...
[code]SSH上传下载 ------温故知新 -
thinking_ou:
怎么需要解压密码
webserivce spring-ws 安全 -
ap0406708:
uuu999ggg 写道连return都写错了
try catch finally 块 与 函数的return -
wst0350:
...
java正则表达式,js正则表达式
java字节码 是与机器无关的代码,由Java编译器生成,Java解释器来执行。
先来一个程序看看会生成些什么字节码.
用javap -c [类名] 命令看一下会生成些什么字节码.用 lvar 表示局部变量表,就像它是一个 Java 数组
//////////////////////////////////////////////
1.字节码主要涉及两个东西,第一是堆栈,第二是局部变量表.
2.堆栈是后进先出,如是赋值等操作都是先要压进堆栈再弹出,这样做的.变量自己加1,像iinc 0 1 ;这样就可以在局部变量表中完成.
3.命令
栈的
iconst_0 ,把常量0压进堆栈,i代表int类型,const常量意思,0是值.
istort_0 ,从堆栈顶弹出并保存到局部变量表的0位置,lvar[0]=栈顶.i代表int,stort保存,0值.
ireturn ,从堆栈中弹出值并将它推到调用方法的操作数栈中。退出方法.i代表int
变量表的
iload_0 ,局部变量表,索引0的压进堆栈.0代表变量表中的位置.
iinc 0 1 ,索引位置加0的值加1.
4.索引表的位置
索引表位置i是lvar[0],j是lvar[1],k是lvar[2].
参考:
关注性能: 宏性能基准测试 http://www.ibm.com/developerworks/cn/java/j-perf12053/index.html
先来一个程序看看会生成些什么字节码.
public static int preIncrement() { int i = 0, j; j = ++i; return j; } public static int postIncrement() { int i = 0, j; j = i++; return j; }
用javap -c [类名] 命令看一下会生成些什么字节码.用 lvar 表示局部变量表,就像它是一个 Java 数组
Method int preIncrement() 0 iconst_0 //push 0 onto the stack 1 istore_0 //pop 0 from the stack and store it at lvar[0], i.e. lvar[0]=0 2 iinc 0 1 //lvar[0] = lvar[0]+1 which means that now lvar[0]=1 5 iload_0 //push lvar[0] onto the stack, i.e. push 1 6 istore_1 //pop the stack (value at top is 1) and store at it lvar[1], i.e. lvar[1]=1 7 iload_1 //push lvar[1] onto the stack, i.e. push 1 8 ireturn //pop the stack (value at top is 1) to the invoking method i.e. return 1 Method int postIncrement() 0 iconst_0 //push 0 onto the stack 1 istore_0 //pop 0 from the stack and store it at lvar[0], i.e. lvar[0]=0 2 iload_0 //push lvar[0] onto the stack, i.e. push 0 3 iinc 0 1 //lvar[0] = lvar[0]+1 which means that now lvar[0]=1 6 istore_1 //pop the stack (value at top is 0) and store at it lvar[1], i.e. lvar[1]=0 7 iload_1 //push lvar[1] onto the stack, i.e. push 0 8 ireturn //pop the stack (value at top is 0) to the invoking method i.e. return 0
<table border="1" cellpadding="3" cellspacing="0" width="100%"> <tr align="left" valign="middle"> <td><b>字节码</b></td> <td><b>描述</b></td> </tr> <tr> <td>iconst_0</td> <td>将 0 推到堆栈中</td> </tr> <tr> <td>iconst_1</td> <td>将 1 推到堆栈中</td> </tr> <tr> <td>istore_0</td> <td>从堆栈中弹出这个值,并将它存储到局部变量表的索引 0 处</td> </tr> <tr> <td>istore_1</td> <td>从堆栈中弹出这个值,并将它存储到局部变量表的索引 1 处</td> </tr> <tr> <td>iload_0</td> <td>将局部变量表索引 0 处的值推到堆栈中</td> </tr> <tr> <td>iload_1</td> <td>将局部变量表索引 1 处的值推到堆栈中</td> </tr> <tr> <td>iadd</td> <td>从操作数堆栈中弹出两个整数并让它们相加。将得到的整数推回堆栈中</td> </tr> <tr> <td>iinc 0 1</td> <td>局部变量表索引 0 处的变量加 1</td> </tr> <tr> <td>ireturn</td> <td>从堆栈中弹出值并将它推到调用方法的操作数栈中。退出方法</td> </tr> </table>
//////////////////////////////////////////////
1.字节码主要涉及两个东西,第一是堆栈,第二是局部变量表.
2.堆栈是后进先出,如是赋值等操作都是先要压进堆栈再弹出,这样做的.变量自己加1,像iinc 0 1 ;这样就可以在局部变量表中完成.
3.命令
栈的
iconst_0 ,把常量0压进堆栈,i代表int类型,const常量意思,0是值.
istort_0 ,从堆栈顶弹出并保存到局部变量表的0位置,lvar[0]=栈顶.i代表int,stort保存,0值.
ireturn ,从堆栈中弹出值并将它推到调用方法的操作数栈中。退出方法.i代表int
变量表的
iload_0 ,局部变量表,索引0的压进堆栈.0代表变量表中的位置.
iinc 0 1 ,索引位置加0的值加1.
4.索引表的位置
int i,j,k;
索引表位置i是lvar[0],j是lvar[1],k是lvar[2].
参考:
关注性能: 宏性能基准测试 http://www.ibm.com/developerworks/cn/java/j-perf12053/index.html
发表评论
-
从安全和体验上解析移动App的登录
2016-03-02 11:00 531从安全和体验上解析移动App的登录 http://blog.c ... -
hwpf POI
2010-11-13 14:19 1077样式集 StyleSheet styleSheet = hwp ... -
java 注解~~~
2010-11-05 16:00 800/** * 下载文件流 * @param re ... -
SQL
2010-11-04 09:59 782select * from ( select s1.* ,s2 ... -
为什么JAVA要提供 wait/notify 机制?是为了避免轮询带来的性能损失
2010-10-20 17:43 921/* *分析synchronized方法 *s ... -
spring 容器
2010-10-11 10:43 758WebApplicationContext wac = ... -
barcode4j demo
2010-09-25 17:51 959demo~~~~~~~ -
java 转义字符
2010-09-19 14:33 952public class testWord { p ... -
Spring Security 网址
2010-08-02 16:44 794Spring Security 参考文档 [url]h ... -
单点登录(Single Sign On) SSO
2010-08-02 15:31 725编写你自己的单点登录(SSO)服务 http://blog.c ... -
POI 生成excel文件
2010-08-02 11:16 997package com.zhao.poi.test; ... -
java调用本地方法,java与C,C++互调
2010-07-28 10:48 1191JNI Java Native Interface http ... -
用户权限管理模块设计
2010-06-15 11:24 1213用户权限管理模块设计 http://wenku.baidu. ... -
Flex
2010-05-26 14:26 623http://www.blogjava.net/bolo/ar ... -
好垃圾本书中好有用的两个存储过程
2010-05-12 14:52 714来源: SQL动态交叉表 http://blog.csdn.n ... -
jasperreports 与 iReport
2010-04-28 15:10 8591. jasperreports 是生成报表的组件, 其中 ... -
ANT 命令
2010-04-28 14:27 10421. ant 默认命令 2. ant -p 查看所有 ... -
java编译 ant
2010-04-28 10:36 756Tutorial: Hello World with Ant ... -
java如系统环境变量和bat设环境变量
2010-04-27 15:59 2494java_home.bat wmic ENVIRONMEN ... -
网站VS系统
2010-02-07 09:56 950http://www.yingshengxs.com/cn/s ...
相关推荐
Java字节码简单说明
java字节码加密
java字节码反编译工具 JAD+FrontEnd
Java字节码分析工具,系统分析了java字节码文件,即java class类文件,对该文件中的各种成分以树的形式描述出来,只能针对未加密的class文件,一般由标准java编译器编译生成的class文件都未加密,该系统在vs2003下面...
Java字节码优化框架
轻松看懂Java字节码,对java字节码的详细分析,理解java字节码
我测试了一个前端时间开发的一个网络通讯工具,其中用到了很多java15的特性,例如泛形,增强循环,静态引入等功能,以及jdk15独有的类文件,例如StringBuilder等。通过该工具进行转换,可以完美的运行在java14环境...
关于java字节码的开源介绍,可以参考来吧 关于java字节码的开源介绍,可以参考来吧
基于Java字节码的混淆技术研究 基于Java字节码的混淆技术研究
Java 字节码概述ppt说明文档,欢迎交流
JAVA字节码JAVA字节码
查看编辑class文件,可查看操作字节码bytecode指令
Java 字节码简单说明
javassist, Java字节码工程工具包 Java字节码工程工具包 版本 3版权所有( C ) 1999 -2017按 Shigeru Chiba,保留所有权利。Javassist ( Java编程助手) 使Java字节码操作简单。 它是一个类库,用于在Java中编辑字节码
优秀的Java字节码可视化编辑工具,使用方便上手简单。
jd-gui java字节码反编译 class反编译 jd-gui java字节码反编译 class反编译
JAVA字节码操作库 BCEL
Java Bytecode Editor是修改和分析java字节码结构和类文件的有效工具:下载解压后,双击jbe. bat(Windows)或jbe.sh(Linux)即可运行JBE。src目录下的是JBE的源码。
一个牛逼的 Java 字节码类库!(csdn)————程序
ASM Java字节码操作框架PPT,结合已有AOP实现方法,对比所有对Java字节码操作方法做比较