堆:就是一块内存,通常应用程序调用api来由os分配,用链表结构管理 不是 数据结构堆(有序树结构,比如二叉堆、斐波那契堆),无序的、不连续的,所有线程共享的
栈(堆栈):线程创建时由JVM(CLR、os)分配一个固定大小的连续空间作为栈,遵循数据结构的栈出入规则后进先出(FILO),有序的、连续的,线程私有的
局部性原理:
计算机怎样才能判断一个数据接下来可能被用到?
时间局部性:如果一个数据正在被访问,那么在近期它很可能还会被再次访问。这当然是正确的,用过的数据当然可能再次被用到。
空间局部性:在最近的将来将用到的信息很可能与现在正在使用的信息在空间地址上是临近的,正在使用的这个数据地址旁边的数据,当然也是很可能被用到的。比如数组什么的……
总体来说分配速度栈比堆快,因为是连续的,也不需要用链表来维护空闲的堆块,比如碎片整理,合并空闲块啥的
操作速度也应该要比堆快也因为,如果相对于不连续的堆对象来讲
当然如果是多次使用,以及连续地址,那么堆和栈都有可能使用到寄存器或高级缓存,读写的也都是内存,单比较使用速度应该差不多