内存栈与内存堆的区别
内存栈
又称为栈内存,它有以下特点:
1.
函数压栈和弹栈符合后进先出的原则;
2.
无论是变量还是函数,栈内存都是由高地址向低地址拓展,它是一块连续的内存区域;
3.
栈内存的分配在运行前(编译)完成,运行时回收,且回收的素速度很快;
4.
栈内存是由系统自动分配的;
内存堆
又称为堆内存,它有一下特点:
1.
他是用静态链表来存储内存的地址;
2.
堆内存是由低地址向高地址拓展,它是一块不连续的内存区域;
3.
内存块有两种状态:已使用和闲置,分配时,将内存块标志为已使用,回收时,将内存块标志为闲置;
4.
分配时,它的时间复杂度为O(n),因为它需要遍历链表寻找闲置的内存块;
5.
内存回收的方式有两种,一种是手动回收(C,C++),一种是GC线程自动回收(Java);
6.
标志清除算法是最基本的内存回收算法;
7.
堆内存需要程序员自己申请,并指明大小;