栈
- 位置:位于RAM(随机访问存储器,也称主存,内存)中
- 释放方式:使用完后马上被释放
- Java中的使用:Java中的基本数据类型,对象引用都存储在栈中
- 容量大小和分配效率:栈的大小在操作系统中已经提前设定,通常很小,但是由系统自动分配,速度快
- 分配方式:申请后,由系统判断栈剩余容量是否大于申请容量,是则直接分配,否则提示栈溢出
堆
- 位置:也位于RAM中
- 释放方式:使用完后不会自动被释放,需要程序员手动释放(C++),或者由垃圾回收机制定期释放(Java),否则将在程序结束后由操作系统释放。
- Java中的使用:Java中的对象存储在堆中
- 容量大小和分配效率:容量比栈大得多,但是在分配时需要进行一系列步骤,比栈的分配慢得多
- 分配方式:在系统内有一个记录空闲内存地址的链表,当系统收到申请时,会去遍历这个链表,找出其中第一个大于所申请容量的地址,将其从链表中删除,并分配给申请的程序。