堆和栈的几点区别

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

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

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

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

JAVA中运行机制:
   与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
   堆内存用来存放由new 创建的对象和数组,由GC回收内存。分配和销毁时都要占用时间,因此用堆的效率非常低.但是堆的优点在于,编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间,因此,用堆保存数据时会得到更大的灵活性。
   Java中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在堆栈中分配,也就是说在建立一个对象时从两个地方都分配内存,在堆中分配的内存实际建立这个对象,而在堆栈中分配的内存只是一个指向这个堆对象的指针(引用)而已。
  最后附一张简单堆和栈区分的图片:
 

猜你喜欢

转载自Jasonone.iteye.com/blog/2243507