区别:
- 栈内存存储的是局部变量而堆内存存储的是实体;
- 栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短;
- 栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。
运行机制:
main 中的 int[] arr = new int[3];
- arr在栈内存中声明。
- arr在堆内存中,产生空间实体化并进行默认初始化
- 栈内存中的arr指向arr在堆内存中的地址,即arr引用了堆内存中的地址,所以数组也叫引用数据类型。
- int[] arr = null;
- arr不再指向堆内存中实体。
- 堆内存中的实体,被当作垃圾,即堆内存并没有释放。
- JAVA虚拟机会不定时回收。