其神若何,月射寒江。

java字节码之栈的操作

上一篇 / 下一篇  2010-04-21 22:23:45 / 个人分类:开发技术

绝大部分java指令的操作都跟栈有关。

代码:

public void str(){

             int i,j,k,e,f,o;

             i=2;

             k=88;

             o=45;

      }

    

  

 字节码:

 

Code(max_stack = 1, max_locals = 7, code_length = 10)

0:   iconst_2   //常量2压入栈

1:   istore_1   //出栈数据保存在局部变量1中,也就是i

 

2:   bipush        88 //88入栈

4:   istore_3       //出栈数据保存在局部变量3中,也就是k

 

5:   bipush        45  //45入栈

7:   istore          %6 //出栈数据保存到局部变量6中,也就是0

9:   return

 

Attribute(s) =

LineNumber(0, 19), LineNumber(2, 20), LineNumber(5, 21), LineNumber(9, 22)

 

LocalVariable(start_pc = 0, length = 10, index = 0:demo.First this)

LocalVariable(start_pc = 2, length = 8, index = 1:int i)

LocalVariable(start_pc = 5, length = 5, index = 3:int k)

LocalVariable(start_pc = 9, length = 1, index = 6:int o)

 

>>入栈

1. 有的操作是数据就包含在操作码中

iconst_2表示把2入栈。可提高效率

 如果没有操作数在操作码中的,就必须使用xxpush 操作了,

bipush           88 //88入栈

>>出栈

 当然是把栈中的数据保存到变量中

 1.出栈到局部变量中,有的操作码已经指定了到哪个局部变量中

 istore_1   //出栈数据保存在局部变量1

 2出栈,如果局部变量超过一定的什么,没有对应的指令就要用istore指定局部变量的位置

    istore           %6 //出栈数据保存到局部变量6中,也就是0

>>局部变量的位置

 出栈指令中指定的是局部变量索引的位置,也就是LocalVariableindex

---------------------river.liu 2010.4.24


TAG: java Java 字节码

 

评分:0

我来说两句

xiaohanjiang

xiaohanjiang

River.liu又名小寒江。曾经从事多年JAVA软件开发工作,这几年一直从事软件测试工作。多年来,一直致力于软件工程、软件开发、软件测试方面的研究。不喜欢自称高手,不愿意自封资深;科学研究讲究的是务实、实践。真理、真知才是硬道理。茫茫海洋,我只希望我的每个理念能游弋于业界之间。我的思想能在你的脑海中徜徉。

日历

« 2024-04-15  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 39642
  • 日志数: 52
  • 建立时间: 2009-12-15
  • 更新时间: 2011-03-14

RSS订阅

Open Toolbar