堆和栈的区别是什么

1、堆栈空间分配区别

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

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

2、堆栈缓存方式区别

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

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

3、堆栈数据结构区别

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

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

栈为什么效率比堆高

总结如下:

1、有寄存器直接对栈进行访问(esp,ebp),而对堆访问,只能是间接寻址。

也就是说,可以直接从地址取数据放至目标地址;使用堆时,第一步将分配的地址放到寄存器,然后取出这个地址的值,然后放到目标地址。

2、栈中数据cpu命中率更高,满足局部原理。

3、栈是编译时系统自动分配空间,而堆是动态分配(运行时分配空间),所以栈的速度快。

4、栈是先进后出的队列结构,比堆结构相对简单,分配速度大于堆。

“堆”和“栈”并不是数据结构上的Heap跟Stack,而是程序运行中的不同内存空间。

那么这就简单了,栈是程序启动的时候,系统分好了给你的,你自己用,系统不干预。

堆是用的时候才向系统申请的,用完了还回去,这个申请和交还的过程开销相对就比较大了。

栈与堆都是Java用来在Ram中存放数据的地方。

栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)。存在栈中的数据可以共享。栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活

堆是一个运行时数据区,类的(对象从中分配空间。由于要在运行时动态分配内存,存取速度较慢。存在栈中的数据可以共享。

栈是编译时分配空间,而堆是动态分配(运行时分配空间),所以栈的速度快

cpu有专门的寄存器(esp,ebp)来操作栈,堆都是使用间接寻址的。栈快点

作者:星期天去哪玩o

链接:https://www.jianshu.com/p/27c0fc1aecab

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

推荐内容