JVM3-Java内存区域JAVA虚拟机栈

 

简介:JVM内存模型之java虚拟机栈

  - 是什么?

    - 用于作用于方法执行的一块Java内存区域

  - 为什么?
    - 每个方法在执行的同时都会创建一个栈帧(Stack Framel)用于存储局部变量表(局部变量的位置引用地址)、操作数栈、动态链接(引用其他对象的地址)、方法出口(return返回值)等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程

  - 特点?
    - 局部变量表存放了编译期可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)以及对象引用(reference 类型)
  - 如果线程请求的栈深度大于虚拟机所允许的深度,将抛出 StackOverflowError 异常

 

public class A {

    public native static void c();
    public static void a(){
        System.out.println("enter method a");
    }

    public static void b(){
        a();
        System.out.println("enter method b");
    }

    public static void main(String[] args) {
        b();
        System.out.println("enter method main");
        
    }
}

  如以上方法的执行:main方法开始  main里面调用B B方法又调用A  他们入栈的顺序就是 main-B-A   A执行完返回后B才执行完  B执行完后main才接着执行完;

所以出栈的顺序就是A-B-main   它们执行所在的方框区域那块内存  就是栈。

posted @ 2019-06-18 18:10  valar-dohaeris  阅读(199)  评论(0)    收藏  举报