jvm
2021-03-27 22:15:27 6 举报
代码在虚拟机中的执行过程
作者其他创作
大纲/内容
方法区(元空间)
math
2.创建局部变量int型a并在堆中分配内存
本地方法栈
每个方法执行时都会产生一个栈帧
线程私有的
a=1
3.操作数栈1出栈,给a赋值
程序计数器
堆
执行引擎
线程
用来调用c语言方法,也是线程私有的
方法出口
1.压入1到操作数栈
public class com.example.demo.Math { public static int initData; public static com.example.demo.User user; public com.example.demo.Math(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object.\"<init>\":()V 4: return public int compute(); 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 #2 // class com/example/demo/Math 3: dup 4: invokespecial #3 // Method \"<init>\":()V 7: astore_1 8: aload_1 9: invokevirtual #4 // Method compute:()I 12: pop 13: return static {}; Code: 0: sipush 666 3: putstatic #5 // Field initData:I 6: new #6 // class com/example/demo/User 9: dup 10: invokespecial #7 // Method com/example/demo/User.\"<init>\":()V 13: putstatic #8 // Field user:Lcom/example/demo/User; 16: return}
虚拟机栈(线程栈)
1
类装载子系统
main()栈帧
class文件
动态链接
操作数栈
2
public class Math{ public static int initData = 666; public static User user = new User(); public int compute(){ int a =1 ; int b =2 ; int c =(a+b)*10; return c; } public static void main(String[] args){ Math math = new Math(); math.compute(); }}
compute()栈帧
直接内存中
局部变量表
javap -c class文件获得反汇编代码
0 条评论
回复 删除
下一页