java虚拟机中栈的运行知识点总结

网友投稿 219 2023-01-03

java虚拟机中栈的运行知识点总结

运行原理

1、不同线程中所包含的栈帧是不允许存在相互引用的。

2、如果当前方法调用了其他方法,方法返回之际,当前栈帧会传回此方法的执行结果给当前一个栈针,并且虚拟机会丢弃当前栈帧,使得前一个栈帧重新成为当前栈帧。

3、java方法有两种返回函数的方式,一种是正常的函数返回,使用return指令;另一种是抛出异常。不管使用哪种方式,都会导致栈帧被弹出。

实例

public class StackFrameTest {

public static void main(String[] args) {

StackFrameTest stackFrameTest = new StackFrameTest();

stackFrameTest.method1();

}

public void method1(){

System.out.println("method1()开始执行");

method2();

System.out.println("method1()执行结束");

}

public int method2(){

System.out.println("method2()开始执行");

int i = 100;

int m = (int)method3();

System.out.println("method2()即将结束");

return i + m;

}

public double method3(){

System.out.println("method3()开始执行");

http:// double j = 3.1;

System.out.println("method3()即将结束");

return j;

}

}

知识点扩充:

1. Java栈也称为虚拟机栈,也就是我们常常所说的栈。 Java栈是Java方法执行的内存模型。

2. Java栈中存放的是一个个的栈帧,每个栈帧对应一个被调用的方法,在栈帧中包括局部变量表(Local Variables)、操作数栈(Operand Stack)、指向当前方法所属的类的运行时常量池(运行时常量池的概念在方法区部分会谈到)的引用(Reference to runtime constant pool)、方法返回地址(Return Address)和一些额外的附加信息。 当线程执行一个方法时,就会随之创建一个对应的栈帧,并将建立的栈帧压栈。当方法执行完毕之后,便会将栈帧出栈。 因此对于方法没有存在回收资源一说 。

3. 局部变量表,顾名思义,想必不用解释大家应该明白它的作用了吧。就是用来存储方法中的局部变量(包括在方法中声明的非静态变量以及函数形参)。对于基本数据类型的变量,则直接存储它的值,对于引用类型的变量,则存的是指向对象的引用。局部变量表的大小在编译器就可以确定其大小了,因此在程序执行期间局部变量表的大小是不会改变的。

4. 操作数栈,想必学过数据结构中的栈的朋友想必对表达式求值问题不会陌生,栈最典型的一个应用就是用来对表达式求值。想想一个线程执行方法的过程中,实际上就是不断执行语句的过程,而归根到底就是进行计算的过程。因此可以这么说,程序中的所有计算过程都是在借助于操作数 。

以上就是java虚拟机中栈的运行知识点总结的详细内容,更多关于java虚拟机中栈的运行原理的资料请关注我们其它相关文章!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何调用网站api接口(如何调用网站api接口)
下一篇:IDEA使用SpringAssistant插件创建SpringCloud项目
相关文章

 发表评论

暂时没有评论,来抢沙发吧~