栈
由系统自动分配释放
向下分配,先进后出(FILO),压栈弹栈
速度快
小(1、2M)
编译时即确定内存大小
java由jvm管理堆栈,程序员无需插手
java中基础数据类型存储在栈中,immutable(不可变的),对象类型存储在堆中
String类型比较特殊
String str = "abc"; -- 存储在栈中 -- immutable(不可变的)
String str = new String("abc"); -- 存储在堆中
C++占用内存分为五个部分:栈区、堆区、静态区(static)、文字常量区、程序代码区
堆
由程序分配释放
向上分配,先进先出(FIFO),类似链表
速度相对较慢
大(32位系统 - 4G)
由于动态分配不固定大小的内存,产生内存碎片
运行时解析器顺序寻找大于所需内存空间的链表空间
new操作符分配的是堆