文档章节

使用javap分析return和finally的执行字节码

墙头草
 墙头草
发布于 2011/09/16 10:42
字数 648
阅读 110
收藏 0

常见指令:
1、putstatic       #5;
--putstatic当栈顶元素出栈放到常量解析池中的#5位置
2、iconst_1
--int常量1放入操作数栈
3、aload_0
--将局部变量0位置对象取出来,压入栈push  
4、invokespecial   #1; //Method java/lang/Object."<init>":()V
--调用父类构造方法,并出栈pop
5、putfield        #2; //Field A:[I
--putfield指把栈顶对象pop,然后赋值给常量解析池中的#2位置
6、getstatic       #3; //Field/lang/System.out:Ljava/io/PrintStream;
--取出静态成员变量push入栈,常量解析池中的#3位置
7、 dup
--复制当前栈顶对象,再压入栈push
8、astore_1
--将返回对象放到局部变量位置1,pop  
9、istore_2   
--将栈顶元素保存到局部变量位置2,pop
10、iinc    2, 1
--将栈顶元素自加1再入栈 学不完的技术,如何定位很重要?
11、invokevirtual   #8; //Method java/io/PrintStream.println:(I)
--调用打印方法
12、 bipush  6 
--bipush将(byte)字节形转换成(int)整形,并且压入栈push
13、iastore          
--数据元素操作指令:在位置上放入刚存入的值pop 1 ;pop 0; pop 数组对象

package com.****.test1;


/**
 * try-finally的执行
 * @author jame
 * @date 2011年9月1日11:14:01
 */
public class ReturnTest {

    public static void main(String[] args) {
        System.out.println("main method:"+ReturnTest.test());
    }
    原谅我是这样的人
    static int test()
    {
        int x = 1;
        try
        {
            return x;
        }
        finally
        {
            ++x;
            System.out.println("finally:"+x);
        }
    }

}
Compiled from "ReturnTest.java"
public class com.skyon.test1.ReturnTest extends java.lang.Object{
public com.skyon.test1.ReturnTest();
//初始化工作
  Code:
   0:   aload_0 //将局部变量0位置对象取出来,压入栈push  
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V //调父类构造函数
   4:   return  //返回本函数

public static void main(java.lang.String[]);
  Code:
   0:   getstatic       #2; //Field a/lang/System.out:Ljava/io/PrintStream;
//取出静态成员变量push入栈,常量解析池中的#2位置
   3:   invokestatic    #3; //Method test:()I
//调用test()方法
   6:   invokevirtual   #4; //Method java/io/PrintStream.println:(I)V
//调用println()方法
   9:   return

static int test();
  Code:
   0:   iconst_1  //将x变量的初始值1放入操作数栈
   1:   istore_0  //将栈顶元素保存到局部变量位置0,pop
   2:   iload_0   //将局部变量0位置对象取出来,压入栈push  
   3:   istore_1  //将栈顶元素保存到局部变量位置1,pop
   4:   iinc    0, 1  //将栈顶元素自加1再入栈
   7:   getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;

   10:  iload_0
   11:  invokevirtual   #4; //Method java/io/PrintStream.println:(I)V

   14:  iload_1
   15:  ireturn
   16:  astore_2
   17:  iinc    0, 1
   20:  getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
   23:  iload_0
   24:  invokevirtual   #4; //Method java/io/PrintStream.println:(I)V

   27:  aload_2
   28:  athrow
  Exception table:
   from   to  target type
     2     4    16   any
    16    17    16   any

© 著作权归作者所有

墙头草
粉丝 16
博文 145
码字总数 117172
作品 0
卢湾
私信 提问
JVM字节码与Java代码层调优

jvm字节码指令 我们都知道,Java源代码不会像C/C++那样直接被编译为机器码,而是被编译成字节码,这造就了Java可以跨平台的特性。JVM实际执行的也是编译后的字节码,所以想要在Java代码层进行...

ZeroOne01
2018/07/27
0
0
Java并发编程原理与实战八:产生线程安全性问题原因(javap字节码分析)

前面我们说到多线程带来的风险,其中一个很重要的就是安全性,因为其重要性因此,放到本章来进行讲解,那么线程安全性问题产生的原因,我们这节将从底层字节码来进行分析。 一、问题引出 先看...

pony1223
2018/07/24
0
0
用字节码分析Java的For循环

Fou循环常常用,但是在字节码层它是怎样执行的呢?出于兴趣驱使,就有了这篇短文了! 首先要分析字节码就得先写个类了,代码如下: public class ForTest{public static void main(String[] ...

朽龙
2015/01/02
304
0
[Class文件结构] 3 - 方法表、属性表

前言 [Class文件结构] 2 - 常量池、字段表对常量池、字段表等进行了阐述,本文继续分析Class文件,阐述方法表、属性表等。 方法表 方法表结构如下图所示: 和字段表类似,依次包含访问标志(...

某昆
2018/01/01
0
0
UltraEdit 执行javap命令

UltraEdit 是一款很好用的文本编辑器,非常推荐使用 我们可以用编辑器来执行javap命令来分析class字节码文件 点击 运行DOS命令 输入 javap -v -p -c -s -l D:espesp-portalesp-portal-serve...

江上湖人
2016/11/15
14
0

没有更多内容

加载失败,请刷新页面

加载更多

JavaScript设计模式——适配器模式

  适配器模式是设计模式行为型模式中的一种模式;   定义:   适配器用来解决两个已有接口之间不匹配的问题,它并不需要考虑接口是如何实现,也不用考虑将来该如何修改;适配器不需要修...

有梦想的咸鱼前端
11分钟前
1
0
Andorid SQLite数据库开发基础教程(1)

Andorid SQLite数据库开发基础教程(1) Android数据库访问方式 SQLite是Android系统默认支持的文件数据库。该数据库支持SQL语言,适合开发人员上手。本教程将讲解如何开发使用SQLite的Andro...

大学霸
14分钟前
1
0
Handler简解

Handler 这里简化一下代码 以便理解 Handler不一定要在主线程建 但如Handler handler = new Handler(); 会使用当前的Looper的, 由于要更新UI 所以最好在主线程 new Handler() { mLooper = Lo...

shzwork
36分钟前
4
0
h5获取摄像头拍照功能

完整代码展示: <!DOCTYPE html> <head> <title>HTML5 GetUserMedia Demo</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum......

诗书易经
38分钟前
3
0
正向代理和反向代理

文章来源 运维公会:正向代理和反向代理 1、正向代理 (1)服务对象不同 正向代理服务器的服务对象是客户端,可以将客户端和代理服务器看作一个整体。 (2)配置方法不同 需要在客户端配置代...

运维团
55分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部