作者: 小鱼_a563 | 来源:发表于2022-11-30 15:23 被阅读0次

核心概念

先进后出,后进先出。 First In Last Out (FILO)。

栈是一种数据结构,可以简单理解为桶的形状 桶.png

和他类似的数据结构类型是队列。
队列:先进先出,后进后出

栈内存,主管程序的运行,生命周期和线程同步;线程结束,栈内存释放。对于栈来说,不存在垃圾回收问题。一旦线程结束,栈就over。
栈主要存放:8大基本类型+方法的引用+对象的引用

栈帧

栈帧分为栈底和栈顶,每执行一个方法都会产生一个栈帧。


image.png

一个对象实例化的过程

代码

public class StudentTest {
    private String name;
    private int age;
    public static void main(String[] args) throws Exception {
        StudentTest studentTest = new StudentTest();//第一次初始这个类(第一次加载这个类)
        System.out.println("new 出来studentTest对象"+studentTest.age);
        System.out.println("new 出来studentTest对象"+studentTest.name);
        studentTest.testStudent();
    }
    void testStudent(){
        this.age=15;
        this.name="小余";
        System.out.println("对象调用testStudent方法中"+this.age);
        System.out.println("对象调用testStudent方法中"+this.name);
    }
}

程序执行到 main() 方法时,main()函数方法体会进入栈区,这一过程叫做进栈(压栈)


image.png
image.png

栈内存溢出

1.栈内存溢出会抛出Throwable级别的错误:java.lang.StackOverflowError
2.栈内存有两个主要原因:

1.栈中方法太多了(压栈过多),导致栈内存溢出。(图栈溢出1-1)
2.栈中方法过大,导致栈内存溢出(图栈溢出1-2)
栈溢出1-1.png

代码演示方法过多导致栈溢出

/**
 * @PROJECT_NAME: java-jvm
 * @DESCRIPTION: 栈内存溢出demo
 * @USER: 1
 * @DATE: 2022/11/30 15:10
 * @author: xiaoyu
 */
public class StockDemo01 {
    // 定义一个类变量,用于记录方法运行次数
    static int count;
    public static void main(String[] args) {
        try {
            test();
        }catch (Throwable e) {
            e.printStackTrace();
            System.out.println(count);
        }
    }
    // 错误的无限递归,进行压栈
    static  void  test(){
        count++;
        test();
    }
}
栈溢出1-2.png

相关文章

  • Java实现栈

    数组栈:压栈、出栈、返回栈顶元素 链式栈:压栈、出栈、返回栈顶元素

  • 数据结构之 栈

    栈结构 链式栈 一.栈结构体 1构建空栈 2栈置空 3判断栈空 4获取栈顶 5入栈 6出栈 7便利栈 二.链式栈 ...

  • 栈和队列

    1、栈 栈是一种先进先出的数据结构。栈顶进栈,栈顶出栈。 数据结构 栈的初始化 进栈 出栈 栈的最小值 2、队列 ...

  • 递归累加数组

    入栈 5入栈 4入栈 3入栈 2入栈 1出栈 [1 0]出栈 [2 1 0]出栈 [3 2 1 0]出栈 [4 3...

  • 栈的逻辑结构和存储结构

    main()进栈s(1)进栈s(0)进栈 s(0)出栈s(1)出栈main()出栈 顺序栈 一个数组 + 指向栈顶...

  • 单调栈 2020-06-12(未经允许,禁止转载)

    1.单调栈 指栈内元素保持单调性的栈结构,分为单调增栈(栈底到栈顶元素递增)和单调减栈(栈底到栈顶元素递减) 2....

  • 链栈的操作

    链栈的定义 链栈的操作 初始化 判断栈空 入栈 出栈

  • 函数调用栈平衡

    栈平衡 栈平衡:函数调用前后的栈顶指针指向的位置不变 内平栈 外平栈 内平栈: 指的是在函数调用返回之前使栈保持...

  • 栈的简单Java实现

    栈栈的特点是先进后出,出栈、入栈都是在栈顶操作。

  • 汇编学习-入栈和出栈

    栈有两个基本的操作:入栈和出栈。入栈就是将一个新的元素放到栈顶,出栈就是从栈顶取出一个元素。栈顶的元素总是最后入栈...

网友评论

      本文标题:

      本文链接:https://www.haomeiwen.com/subject/civlcltx.html