堆和栈的几点区别

堆和栈一直分得不太清楚,所以今天决定整理一下

结构:
栈(stack)又名堆栈,它是一种先进后出(FILO)的线性表。
特点:容量小 速度快 适合存放小型数据 如 基本数据类型和对象类型的引用

堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。常见的堆有二叉堆、斐波那契堆等。
堆的特点和栈相反 : 因此适合存放对象本身

功能作用比较:
从堆和栈的功能和作用来通俗的比较,堆主要用来存放对象的,栈主要是用来执行程序的.

JAVA中运行机制:
与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
堆内存用来存放由new 创建的对象和数组,由GC回收内存。分配和销毁时都要占用时间,因此用堆的效率非常低.但是堆的优点在于,编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间,因此,用堆保存数据时会得到更大的灵活性。
Java中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在堆栈中分配,也就是说在建立一个对象时从两个地方都分配内存,在堆中分配的内存实际建立这个对象,而在堆栈中分配的内存只是一个指向这个堆对象的指针(引用)而已。
最后附一张简单堆和栈区分的图片:
[img]http://dl2.iteye.com/upload/attachment/0111/7117/016cba54-0d9a-36e2-8d3d-f18988d5175b.jpg[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值