zoukankan      html  css  js  c++  java
  • 数据结构中的堆栈和内存中的堆栈不是一回事

    今天看《码出高效》第四章JVM内容时,读到JVM提供了直接控制操作栈的指令时,突然联想到数据结构中对于栈结构的出入栈的操作。遂联想二者之间莫非有什么关联,于是就查阅相关博文,记录成文。

    数据结构中的堆栈

    :是一种连续存储的数据结构,特点是存储的数据先进后出。

    :是一棵完全二叉树结构,特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆)。它常用于管理算法执行过程中的信息,应用场景包括堆排序,优先队列等。

    内存中的堆栈

    内存空间在逻辑上分为三部分:代码区、静态数据区和动态数据区,动态数据区又分为栈区和堆区。

    代码区:存储方法体的二进制代码。高级调度(作业调度)、中级调度(内存调度)、低级调度(进程调度)控制代码区执行代码的切换。

    静态数据区:存储全局变量、静态变量、常量,常量包括final修饰的常量和String常量。系统自动分配和回收。

    栈区:存储运行方法的形参、局部变量、返回值。由系统自动分配和回收。

    例如 int method(int a){int b;}栈中存储参数a、局部变量b、返回值temp。

    堆区:new一个对象的引用或地址存储在栈区,指向该对象存储在堆区中的真实数据。由程序员分配和回收(Java中由JVM虚拟机的垃圾回收机制自动回收)。

    例如 Class Student{int num; int age;} main方法中Student stu = new Student();分配堆区空间中存储的该对象的num、age,变量stu存储在栈中,里面的值是对应堆区空间的引用或地址。

    参考:https://blog.csdn.net/wolenski/article/details/7951961

  • 相关阅读:
    《编程珠玑,字字珠玑》读书笔记完结篇——AVL树
    中国人,不能自卑,要自强于世界民族之林
    做饭方法
    创建一个强名称密钥文件+ 如何在 Visual C# .NET 中将程序集安装到全局程序集缓存中
    .Net 题目
    页面传值的另一种办法
    成功的12条黄金法则
    English学习资料大全
    .NET中的Serialization
    页面标签使用 实现定位
  • 原文地址:https://www.cnblogs.com/Jashinck/p/10544023.html
Copyright © 2011-2022 走看看