详解java中jvm虚拟机栈的作用
jvm虚拟机栈的作用
jvm虚拟机栈栈帧的组成
jvm虚拟机栈,也叫java栈,它由一个个的栈帧组成,而栈帖由以下几个部分组成
- 局部变量表-存储方法参数,内部使用的变量
- 操作数栈-在变量进行存储时,需要进行入栈和出栈
- 动态连接-引用类型的指针
- 方法出口-方法的返回
- 一段原程序代码
packagecom.lind.basic; publicclassDemo1{ staticinthello(){ inta=1; intb=2; intc=a+b; returnc; } publicstaticvoidmain(String[]args){ System.out.println(hello()); } }
一生成字节码文件
javacdemo1.java
生成之后,扩展名是.class,这个文件对于我们来说是没有可读性的。
二对class文件反汇编
javapdemo1.class>demo1.txt
我们可以通过文件编译工具来查看demo1.txt的内容
Compiledfrom"Demo1.java" publicclasscom.lind.basic.Demo1{ publiccom.lind.basic.Demo1(); Code: 0:aload_0 1:invokespecial#1//Methodjava/lang/Object."":()V 4:return staticinthello(); Code: 0:iconst_1//把第一个整型变量推到操作数栈 1:istore_0//让它出栈,并存储到局部变量表 2:iconst_2 3:istore_1 4:iload_0//加载第一个数据入操作数栈 5:iload_1//加载第二个数据入操作数栈 6:iadd//将两个数相加,结束入操作数栈 7:istore_2//将结果出栈,存到局部变量表 8:iload_2//加载它入操作数栈 9:ireturn//返回 publicstaticvoidmain(java.lang.String[]); Code: 0:getstatic#2//Fieldjava/lang/System.out:Ljava/io/PrintStream; 3:invokestatic#3//Methodhello:()I 6:invokevirtual#4//Methodjava/io/PrintStream.println:(I)V 9:return }
对于上面的汇编文件,我们是可以看的懂的,而且我们需要,汇编语言可以直接在计算机上运行,我想jvm应该也是把class文件生成对应操作系统的汇编文件,然后交给操作系统去执行吧!
总结
以上所述是小编给大家介绍的java中jvm虚拟机栈的作用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!