1.内存区域类型*.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制;,下面我们就来聊聊关于堆与栈知识?接下来我们就一起去了解一下吧!

堆与栈知识(易懂易记忆式堆与栈的总结理解)

堆与栈知识

1.内存区域类型

*.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制;

*. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(对象可能在常量池里)(字符串常量对象存放在常量池中。);

*. 堆:存放所有new出来的对象;

*. 静态域:存放静态成员(static定义的);

*. 常量池:存放字符串常量和基本类型常量(public static final)。有时,在嵌入式系统中,常量本身会和其他部分分割离开(由于版权等其他原因),所以在这种情况下,可以选择将其放在ROM中 ;

*. 非RAM存储:硬盘等永久存储空间

2.堆栈空间分配

栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表

3.堆栈缓存方式

栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。

堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

4、数据结构中的堆和栈

堆和栈在数据结构中是两种不同的数据结构。 两者都是数据项按序排列的数据结构。

栈:像是装数据的桶或者箱子

栈是大家比较熟悉的一种数据结构,它是一种具有后进先出的数据结构,也就是说后存放的先取,先存放的后取,这就类似于我们要在取放在箱子底部的东西(放进去比较早的物体),我们首先要移开压在它上面的物体(放入比较晚的物体)。

堆:像是一颗倒立的大树

堆是一种经过排序的树形数据结构,每个节点都有一个值。通常我们所说的堆的数据结构是指二叉树。堆的特点是根节点的值最小(或最大),且根节点的两个树也是一个堆。由于堆的这个特性,常用来实现优先队列,堆的存取是随意的,这就如同我们在图书馆的书架上取书,虽然书的摆放是有顺序的,但是我们想取任意一本时不必像栈一样,先取出前面所有的书,书架这种机制不同于箱子,我们可以直接取出我们想要的书。

,