栈:是运行时单位,代表逻辑,内含基本数据类型和堆中的对象引用,所在区域连续,没有碎片;
堆:时存储单元,代表着数据,可以被多个栈共享,所在区域不连续,有碎片;
区别:
1、功能不同:栈内存用来存储局部变量和方法调用,而堆内存用存储Java中的对象;无论是成员变量、局部变量、还是类变量他们指向的对象都存储在堆内存中;
2、共享性不同:栈是线程私有,而堆是线程共享;
3、异常错误不同:当内存不足时;栈抛出的是StackOverFlowError异常,而堆抛出的是OutOfMemoryError;
4、空间大小不同:堆空间大小远远大于栈的内存空间。