堆和栈的区别

栈内存:

栈内存主要用来执行程序用的,存储的是局部变量和对象的引用,凡是定义在方法中的都是局部变量,for循环内部定义的也是局部变量,是先加载函数才能进行局部变量的定义,所以方法先进栈,然后再定义变量,一旦离开作用域,变量就会被释放。栈内存更新的速度很快,因为局部变量的生命周期很短。

栈内存可以类似看做是一个矿泉水瓶,往里面放入东西,会马上沉入底部,所以它的特点是:

先进后出,后进先出

栈的存储速度比堆要快,仅次于寄存器,栈数据是可以共享,但是缺点是,存在栈中的数据大小和生存必须是确定的,缺乏灵活性

栈内存可以称为一级缓存,由垃圾回收器自动回收。

堆内存:

堆内存存储的是数组和对象(数组是特殊的对象),凡是new建立的都在堆里,堆中存放都是对象,对象用于封装数据,而且是封装多个属性,如果一个属性消失,这个实体也不会消失,还可以用,所以堆不会随时释放的。虽然对象不会被释放,但是会被当成垃圾,Java有垃圾回收机制不定时的回收。

堆其实可以类似看做是管道,或者说是平时去排队买票,特点是:先进先出,后进后出

堆是在运行时动态分配内存的,存储速度较慢

堆内存可以称为二级缓存,堆中的对象不会随时释放,一般需要开发人员自己回收它

堆和栈的区别:

  1. 栈内存存储的是局部变量,而堆内存存储的是实体对象。

  2. 栈的更新速度要快于堆内存,因为局部变量的生命周期很短。 V栈 > V堆

  3. 栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。

  4. 共享性不同,栈内存是线程私有的,堆内存是所有线程共有的。

  5. 栈使用一级缓存,通常是被调用时处于存储空间,调用完立即释放。

    堆存放在二级缓存中,生命周期由虚拟机的垃圾回收算法决定。

  6. 堆是先进先出,后进后出,栈是先进后出,后进先出

  7. 栈的空间远远小于堆的空间

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值