【深入学习JS】05_栈内存和堆内存

本文详细介绍了栈内存和堆内存的区别。栈内存主要存储基本类型,其变量读取速度快,但数据大小和生存期固定。而堆内存用于存储对象,其大小不固定,利于扩展,但需要通过地址访问。垃圾回收机制负责回收不再使用的堆内存。在JS中,对象存放在堆中,引用存储在栈上,当对象不再需要时,将其赋值为null有助于垃圾回收。
摘要由CSDN通过智能技术生成

前言

之前有一个疑惑的地方:基本类型是存放在栈内存中,引用类型是存放在栈内存和堆内存中。栈内存和堆内存是什么?

栈内存

当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块栈内存里,这些变量会被存放在连续的内存中,随着方法执行结束,这个方法的内存栈也会自然被销毁。

每个变量名都对应具体地存储位置,所以才有栈内存存储的变量读取都很快;缺点是缺点是数据大小与生存期必须是确定的,缺乏灵活性。

堆内存

堆内存的存储和栈不同,他们是内存中的一片空间,存储的顺序并不固定。由于堆内存存放的顺序毫无规律,那么就需要用栈内存将堆内存中对应的地址存储起来:

在这里插入图片描述

当我们在程序中创建一个对象时,由于对象的创建成本通常较大,程序会将对象保存到堆内存,然后将指向堆内存的指针(存储地址)存放在栈内存中。

堆内存的优点是:它是动态分配的内存,物理地址不连续,缺点是不会自动被释放。

垃圾回收机制

栈内存和堆内存的存在,通常与垃圾回收机制有关,可以让程序运行时占用的内存最小。

基本类型使用栈内存,根据地址可以快速读取变量,在方法执行完毕之后,会自动释放掉。
引用类型使用栈内存和堆内存,堆内存的大小是不固定的,便于引用类型扩展属性,对象存放在堆内存中,然后将堆内存中指向的地址保存在栈内存中,这样就不用每次使用同一个对象的时候新建对象,而是直接通过地址去使用该对象,由于对象还可能被另外的变量引用,所以最好在不需要该对象的时候,将该对象赋值null,方便系统的垃圾回收机制回收它。

参考

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值