一直对这两个概念比较模糊,心里不安,所以下决心好好的看了一下它。
它们都是计算机中的数据结构。
堆(heap):把堆比作一个大仓库,仓库里面可以放很多东西。当我们创建一个对象时(new XXX),首先会在堆里面开辟一块空间放置对象本身,然后再把对象的引用地址放入栈中。最后访问该对象时,先通过栈找到引用地址,然后再找到实际对象。
栈(stack): 栈/堆栈(FILO)先入后出。类似于枪的弹夹,先放入的子弹最后才打出来。弹夹最下面被称为栈低,最上面称为栈顶。 子弹压入弹夹的过程称为"进栈",子弹打出去的过程称为"出栈"。它的特点的容量小,查询速度快。一般用于存储基本数据类型变量、临时变量、局部变量和对象的引用地址。当超过该对象/变量作用域时,java就会释放该对象/变量的内存空间。如果是对象,则对象本身就成了无主(废弃)对象,java GC垃圾回收机制在运行时就会把无主对象删除,回收空间.
我的理解,如果有误请指出,感激不尽。