堆和栈一直分得不太清楚,所以今天决定整理一下
结构:
栈(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]
结构:
栈(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]