jvm内存模型分析(1)已经对内存模型进行了一个宏观的概括 http://www.jiajiajia.club/weblog/blog/artical/82
那么下边具体分析一下方法执行的过程
还是以一个简单的类开始
public class Tests {
public int get() {
int a=1;
int b=2;
int c=(a+b)*10;
return c;
}
public static void main(String[] args) {
Tests s=new Tests();
s.get();
}
}
首先我们用javap命令对上面的类进行反编译,得到如下:
Compiled from "Tests.java"
public class jvm.Tests {
public jvm.Tests();
Code:
0: aload_0
1: invokespecial #8 // Method java/lang/Object."<init>":()V
4: return
public int get();
Code:
0: iconst_1
1: istore_1
2: iconst_2
3: istore_2
4: iload_1
5: iload_2
6: iadd
7: bipush 10
9: imul
10: istore_3
11: iload_3
12: ireturn
public static void main(java.lang.String[]);
Code:
0: new #1 // class jvm/Tests
3: dup
4: invokespecial #22 // Method "<init>":()V
7: astore_1
8: aload_1
9: invokevirtual #23 // Method get:()I
12: pop
13: return
}
那我们就以get方法为例说明:
首先贴出,jvm指令集,方便查找:jvm指令集
开始进入get方法,局部变量表和操作数都为空:
方法结束后,栈帧将被销毁~