其中堆和栈的区别可以从四个角度进行回答:存储、速度、线程、垃圾回收
一、存储
stack ---- 存储 ----> java基本变量、引用变量 (string,数组,class等)
heap(堆) ---- 存储 ---> 实例对象(使用new关键字的对象)
借助代码理解:
对于Object obj=new Object(); 其中obj存储在栈中,后面是用来new,所以等号右边的存储在堆中,其中obj指向所创建的实例。
上面变量存储的简单示意图:
二、存储速度
stack ----->存储速度快 (主要是基本变量和对象的引用,其中编译期间就能分配内存)
heap----->存储速度比较慢 (在程序运行之后对象才能建立起来,堆才能动态分配内存)
注:栈的空间比较小,堆的空间比较大
三、线程访问
stack ----->每个线程都有一个栈
heap----->所有线程共享一个堆
四、垃圾回收(GC)
stack --------->较为频繁 (一般是一个方法结束后)
heap ----------> 不频繁