zoukankan      html  css  js  c++  java
  • JS的内存空间

    变量对象与引用数据

    概念解释

    对于基本数据类型UndefinedNullBooleanNumberString往往保存在变量对象

    而对于引用数据类型,如ArrayStringObject等,他们在变量对象中存的是它们在堆内存中的地址,就相当于给我们了一把钥匙,去堆内存中找到所需要的值。

    相关问题
    var m = { a: 10, b: 20 }
    var n = m;
    n.a = 15;
    

    拿这个例子来说,因为{ a: 10, b: 20 }是一个对象,所以变量对象m是对它的一个引用,它的具体值是一个地址名,如0x0012ff7d。

    所以var n = m ;时,就是把这个地址名赋值给了变量对象n,就是说这时,n和m同时是存在堆内存中的对象 { a: 10, b: 20 }的引用。所以n.a = 15 ;实际上是将堆内存中的a的value变成了10,所以理所当然,m.a也就为10了。

    内存释放

    变量对象内存的生命周期
    1. 分配你所需要的内存
    2. 使用分配到的内存(读、写)
    3. 不需要时将其释放、归还
    

    #####如何释放?
    • 局部作用域

      函数执行完毕后垃圾收集器自行回收

    • 全局作用域

    在JavaScript中,最常用的是通过标记清除的算法来找到哪些对象是不再继续使用的,因此a = null其实仅仅只是做了一个释放引用的操作,让 a 原本对应的值失去引用,脱离执行环境,这个值会在下一次垃圾收集器执行操作时被找到并释放。而在适当的时候解除引用,是为页面获得更好性能的一个重要方式。


    总结一下:

    JS没有指针,但指针又在其中。对于引用数据类型就相当于是指针,变量对象就相当于一个指针对象,n.a可以近似与p->a。

    而对于内存释放来说,完成使命的变量可以通过设置为Null进行标记,从而让垃圾收集器更好的回收...


    参考文章:https://yangbo5207.github.io/wutongluo/ji-chu-jin-jie-xi-lie/yi-3001-nei-cun-kong-jian-xiang-jie.html?q=

  • 相关阅读:
    自考新教材-p240_2
    自考新教材-p243_5_(1)
    自考新教材-p242_4
    自考新教材-p233
    自考新教材-p230
    Spring入门(9)-AOP初探
    MongoDB的备份与恢复
    JVM基础知识(1)-JVM内存区域与内存溢出
    Spring入门(8)-基于Java配置而不是XML
    Spring入门(7)-自动检测Bean
  • 原文地址:https://www.cnblogs.com/kiznaiver1998/p/8205437.html
Copyright © 2011-2022 走看看