堆栈区别

堆栈区别

 

堆和栈的区别:

一、堆栈空间分配区别:

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

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

二、堆栈缓存方式区别:

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

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

堆:内存中,存储的是引用数据类型,引用数据类型无法确定大小,堆实际上是一个在内存中使用到内存中零散空间的链表结构的存储空间,堆的大小由引用类型的大小直接决定,引用类型的大小的变化直接影响到堆的变化

栈:是内存中存储值类型的,大小为2M,超出则会报错,内存溢出

三、堆栈数据结构区别:

堆(数据结构):堆可以被看成是一棵树,如:堆排序;

栈(数据结构):一种先进后出的数据结构。

特点:先进后出

对于先进后出,因为Linklist底层实现的是链表结构,所以我们拿Linklist来探索一下什么叫先进后出

代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

package com.zking.list;

  

import java.util.LinkedList;

  

public class Linklisttest {

  

public static void main(String args[]) {

LinkedList ll = new LinkedList();

for (int i = 0; i < 5; i++) {

ll.addFirst(i);

}

  

ll.removeFirst();

  

for (Object object : ll) {

System.out.println(object);

}

  

}

  

}

运行结果:

4ef9e16cf2f2b673738591023bb3907.png

根据这个简单的实例我们可以看出,通过for循环我们在集合添加数据的顺序分别为0,1,2,3,4,

当执行删除方法的时候4被删除,最后遍历出的结果为3,2,1,0

int 是值类型 是储存在栈中  string字符类型 是存储在堆中

所以它体现了堆栈的特点:先进后出。。

原文地址:https://www.cnblogs.com/linnew/p/14464882.html