堆和栈的区别

首先我们要了解在JVM内存是分为:寄存器、本地方法区、方法区、栈内存、堆内存。
我们着重说下堆和栈的异同:

栈:

栈内存是一片内存区域,存储的都是局部变量,凡是定义在方法中的全是局部变量,for循环的内部定义也是局部变量,首先要加载函数才能进行局部变量的定义,而且局部变量也有作用域,只在本方法有效,一旦离开了本作用域,变量就会被释放。因为局部变量的生命周期很短,所以说栈内存的更新速度很快。

堆:

堆内存主要储存的是对象,但凡通过new关键字建立的都存在在堆中,堆中存放的都是实体,实体用于封装数据,而且实体类中通常包含多个属性,这样的话,即便一个数据消失,本实体依旧存在,所以堆并不会对其中的对象进行释放。对于堆中对象的处理只能通过JVM的垃圾回收机制,对对象进行不定时的回收。

在堆栈中的数据存储:

主函数先进栈,在栈中定义一个变量,再在堆中通过new开辟一个空间,然后空间会生成一段连续的二进制地址值,然后堆中的地址值会赋给栈中的变量,使得栈中的变量值通过地址能指向堆中的实体对象。堆内存会给每一个空间进行默认的初始化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值