堆和栈

xiaoxiao2021-08-21  530

其中堆和栈的区别可以从四个角度进行回答:存储、速度、线程、垃圾回收

一、存储

stack      ---- 存储 ---->  java基本变量、引用变量 (string,数组,class等)  

heap(堆) ---- 存储 --->  实例对象(使用new关键字的对象)

借助代码理解:

对于Object obj=new Object(); 其中obj存储在栈中,后面是用来new,所以等号右边的存储在堆中,其中obj指向所创建的实例

上面变量存储的简单示意图:

二、存储速度

stack ----->存储速度快    (主要是基本变量和对象的引用,其中编译期间就能分配内存)

heap----->存储速度比较慢   (在程序运行之后对象才能建立起来,堆才能动态分配内存)

注:栈的空间比较小,堆的空间比较大

三、线程访问

stack ----->每个线程都有一个栈   

heap----->所有线程共享一个堆  

四、垃圾回收(GC)

stack --------->较为频繁   (一般是一个方法结束后)

heap ----------> 不频繁

转载请注明原文地址: https://www.6miu.com/read-4823512.html

最新回复(0)