zoukankan      html  css  js  c++  java
  • JVM 之栈结构

    JVM中三块主要的内存就是:栈内存,堆内存,方法区内存
    方法区最先有数据:方法区中存放的是代码片段,存放class字节码
    栈内存:方法调用的时候,该方法需要的内存空间在栈中分配,并且调用时就是压栈。方法不调用是不会再栈中分配空间的,,方法执行结束后,该方法所需要的空间就会释放,此时发生弹栈动作。
    方法调用叫做:压栈,分配空间
    方法结束叫做:弹栈,出栈,释放空间
    栈中存储什么?方法运行过程中需要的内存,以及栈中会存储方法的局部变量

    栈的形状是露出一边,从露出的这一边进去,也是从这一边出来。所以说,栈的特点是“先进后出”或者“后进先出”。

    如下图:

    栈帧永远指向的是栈顶元素,栈顶元素具有活跃权。

    数据data1先进入栈低,然后数据data2再进入,数据data3最后进去。

    出的时候数据data3先出,然后数据data2再出,数据data1最后出栈。

    public class Stack {
        public static void main(String[] args) {
            System.out.println("main begin");
            int x = 100;
            m1(x);
            System.out.println("main over");
    
        }
    
        public static void m1(int i){
            System.out.println("m1 begin");
            m2(i);
            System.out.println("m1 over");
        }
    
        public static void m2(int i){
            System.out.println("m2 begin");
            m3(i);
            System.out.println("m2 over");
        }
    
        public static void m3(int i){
            System.out.println("m3 begin");
            System.out.println(i);
            System.out.println("m3 over");
        }
    }
    结果:
    main begin m1 begin m2 begin m3 begin
    100 m3 over m2 over m1 over main over

    运行是占用内存情况:1.首先main方法进栈,在main里面调用m1,运行到m1那行代码就停止,然后给m1方法分配内存空间.。因为在m1方法中调用了m2方法,运行至调用m2方法时停止,然后给m2方法分配内存空间,因为在m2方法中调用了m3方法,那么运行至m3方法时给m3方法分配内存空间。如下图所示:这时m3方法是栈帧,执行完over时,整个方法运行结束,m3方法出栈。接下来栈帧指向m2方法,m2输出over,运行完,出栈。然后栈帧指向m1方法,m1输出over,运行完,m1出栈。栈帧指向main方法,然后输出over,main方法出栈,此时程序运行完。

     

     

     

  • 相关阅读:
    CREATE AGGREGATE
    技术文档列表
    jQuery 判断表单中多个 input text 中至少有一个不为空
    Java实现 蓝桥杯 算法提高 奥运会开幕式
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最大值路径
    Java实现 蓝桥杯 算法提高 最大值路径
    Java实现 蓝桥杯 算法提高 最大值路径
  • 原文地址:https://www.cnblogs.com/peiminer/p/13589146.html
Copyright © 2011-2022 走看看