您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:java虚拟机中栈的运行知识点总结

51自学网 2021-10-30 22:26:49
  python
这篇教程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()开始执行");        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虚拟机中栈的运行原理的资料请关注51zixue.net其它相关文章!


Python语言规范之Pylint的详细用法
Python开发工具Pycharm的安装以及使用步骤总结
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。