栈
栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线性表。栈是一种数据结构
,
它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。栈是只能在某一端插入和删除的特殊线性
表。用桶堆积物品,先堆进来的压在底下,随后一件一件往堆。取走时,只能从上面一件一件取。堆和取都在顶部进行,底部一般是不动的。栈就是一种类似桶堆积
物品的数据结构,进行删除和插入的一端称栈顶,另一堆称栈底。插入一般称为进栈,删除则称为退栈。 栈也称为后进先出表。
进栈(PUSH)算法
①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
②置TOP=TOP+1(栈指针加1,指向进栈地址);
③S(TOP)=X,结束(X为新进栈的元素)
退栈(POP)算法
①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);
②X=S(SOP),(退栈后的元素赋给X);
③TOP=TOP-1,结束(栈指针减1,指向栈顶)。
栈可以用来在函数调用的时候存储断点
,做递归时要用到栈!
堆
Heap 译为"堆"是Java虚拟机JVM的内存数据区。Heap 的管理很复杂,每次分配不定长的内存空间,专门用来保存对象的实例。在Heap
中分配一定的内存来保存对象实例,实际上也只是保存对象实例的属性值,属性的类型和对象本身的类型标记等,并不保存对象的方法(方法是指令,保存在
Stack中),在Heap 中分配一定的内存保存对象实例和对象的序列化比较类似。而对象实例在Heap
中分配好以后,需要在Stack中保存一个4字节的Heap 内存地址,用来定位该对象实例在Heap 中的位置,便于找到该对象实例。
[1]
由于Stack的内存管理是顺序分配的,而且定长,不存在内存回收问题;而Heap 则是随机分配内存,不定长度,存在内存分配和回收的问题;
分享到:
相关推荐
C++ 静态存储区 栈 堆。让你更好的了解c++
JVM内存结构-JVM体系结构 程序计数器 虚拟机栈 本地方法栈 堆 方法区
内存分配——静态存储区 栈 堆.doc 很好的讲解。
Java的堆是一个运行时数据区,对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式地释放···
栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
关于Java栈与堆的思考
详细讲解Java中的堆和栈,教你如何让画内存模型图
声明变量是在栈空间开辟了一个位置,实例化之后才会开辟一个堆空间 被赋予空值的话则是将栈空间地址指向一个新的堆空间位置
本文对操作系统的一些基本概念通过一问一答的形式给予介绍,如栈 堆 系统并发,进程,线程等概念
内存中堆和栈的分配区别,程序的内存分配,堆和栈的理论知识
Java堆和栈的区别Java堆和栈的区别Java堆和栈的区别Java堆和栈的区别Java堆和栈的区别Java堆和栈的区别
区别Java中堆与栈区别Java中堆与栈区别Java中堆与栈区别Java中堆与栈区别Java中堆与栈区别Java中堆与栈区别Java中堆与栈区别Java中堆与栈
C语言 堆和栈的区别
堆与栈的区别.txt 堆与栈的区别.txt 堆与栈的区别.txt 堆与栈的区别.txt 堆与栈的区别.txt 堆与栈的区别.txt 堆与栈的区别.txt
栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
Java 中的堆和栈 java 中内存分配策略及堆和栈的比较
堆和栈的详细分析
堆和栈详解 学习的一些总结,希望可以帮助大家。
本文分析了Java中堆内存与栈内存分配的异同
C++_静态存储区_栈_堆的区别