使用具备垃圾收集机制的语言编写程序,开发人员一般不必操心内存管理的问题。但是,JavaScript在进行内存管理及垃圾收集时面临的问题还是有点与众不同。其中最主要的一个问题,就是分配给Web浏览器的可用内存数量通常要比分配给桌面应用程序的少。这样做的目的主要是出于安全方面的考虑,目的是防止运行JavaScript的网页耗尽全部系统内存而导致系统崩溃。内存限制问题不仅仅会影响给变量分配内存,同时还会影响调用栈以及在一个线程中能够同时执行的语句数量。

因此,确保占用最少的内存可以让页面获得更好的性能。而优化内存占用的最佳方式,就是为执行中的代码值保存必要的数据。一旦数据不再有用,最好通过将其值设置为null来释放其引用——这个做法叫做解除引用(dereferencing)。这一做法适用于大多数全局变量和全局对象的属性。局部变量会在它们离开执行环境时自动解除引用。如下面这个例子所示:

 function createPerson(name){var localPerson = new Object();localPerson.name = name;return localPerson;}var globalPerson = createPerson("scott");// do something ...// 手工解除 globalPerson 的引用globalPerson = null;

在这个例子中,变量globalPerson取得了createPerson()函数返回的值。在createPerson()函数内部,我们创建了一个对象并将其赋给局部变量localPerson,然后又为该对象添加了一个名为globalPerson。由于localPerson在createPerson()函数执行完毕后就离开了其执行环境,因此无需我们显式地为它解除引用。但是对于全局变量globalPerson而言,则需要我们在不使用它的时候手工为它解除引用,这也正是上面例子中最后一行代码的目的。
       不过,解除一个值的引用并不意味着自动回收该值所占用的内存。解除引用的真正作用是让值脱离执行环境,以便垃圾收集器下次运行时将其回收。

JavaScript内存管理——优化内存占用相关推荐

  1. 【手游开发优化篇】cocos2d-x内存管理优化(内存是游戏的硬伤)

    2014年05月24日更新 以前的关注点都是 怎么用 根本没有往深层次追踪过.为什么这么用.今天记录下: 如果我们用的是pvr.ccz的图片 加载到内存中是根据你到处是的像素格式来渲染到ui中.如到处 ...

  2. C++ 内存管理中内存泄漏问题产生原因以及解决方法

    C++内存管理中内存泄露(memory leak)一般指的是程序在申请内存后,无法释放已经申请的内存空间,内存泄露的积累往往会导致内存溢出. 一.内存分配方式 通常内存分配方式有以下三种: (1)从静 ...

  3. Linux内存管理:内存寻址之分段机制与分页机制

    目录 Linux 内存寻址之分段机制 前言 分段到底是怎么回事? 实模式的诞生(16位处理器及寻址) 保护模式的诞生(32位处理器及寻址) IA32的内存寻址机制 寻址硬件 IA32的三种地址 MMU ...

  4. Linux内存管理:内存分配:slab分配器

    <linux内核之slob.slab.slub> <Linux内核:kmalloc()和SLOB.SLAB.SLUB内存分配器> <Linux内存管理:内存分配:slab ...

  5. Linux内存管理:内存描述之高端内存

    <Linux内存管理:内存描述之内存节点node> <Linux内存管理:内存描述之内存区域zone> <Linux内存管理:内存描述之内存页面page> < ...

  6. Linux内存管理:内存描述之内存页面page

    <Linux内存管理:内存描述之内存节点node> <Linux内存管理:内存描述之内存区域zone> <Linux内存管理:内存描述之内存页面page> 目录 1 ...

  7. 内存分配器 mysql_聊MySQL内存管理,内存分配器,操作系统

    推荐(免费):mysql视频教程 当用户在使用任何软件(包括MySQL)时遇到内存问题,我们的第一反应就是内存泄漏.正如本文所示,情况并非总是如此. 本文描述了一个关于内存的bug. 所有Percon ...

  8. C++内存管理__内存管理(栈、堆(new/delete)、自由存储区(malloc/freee)、全局/静态存储区、常量区)!堆栈内存管理方式的区别

    内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄 ...

  9. 内存分配器 mysql_MySQL内存管理,内存分配器和操作系统的示例分析

    MySQL内存管理,内存分配器和操作系统的示例分析 发布时间:2021-01-08 14:06:39 来源:亿速云 阅读:79 作者:小新 这篇文章主要介绍MySQL内存管理,内存分配器和操作系统的示 ...

最新文章

  1. 关于JVM,你需要掌握这些!!
  2. python自动化测试看什么书-《自动化平台测试开发-Python测试开发实战》新书出版了...
  3. 深入浅出python机器学习_4.3.1_岭回归的原理 4.3.2_岭回归的参数调节
  4. 点云数据生成三维模型_可直接编辑的高质量3D生成模型:三维深度生成方法SDM-NET...
  5. 开发Adobe AIR的原生扩展
  6. 检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败
  7. 暗黑的字符串---递推公式
  8. linux下测试权限,linux 文件权限
  9. 注册表清理工具PC Performer
  10. 关于我国高等数学教材的版权发财户
  11. 关于get方式提交中文乱码问题的解决方式
  12. 2019新版《龙果学院JavaEE秒杀系统企业级实战应用教程》
  13. python 应用程序无法正常启动 000007b_Win7应用程序无法正常启动0x000007b怎么办?...
  14. 向日葵公主与驴的爱情故事
  15. [渝粤教育] 长沙民政职业技术学院 高职公共英语(三) 参考 资料
  16. 那些花儿(吉他版) --朴树
  17. Python微信机器人之Python _ithcat 持续登陆错误 KeyError: ‘User’
  18. 秋招来袭,想学习Java进大厂的小伙伴,这7点武林秘籍一定要点开看看!(附一线互联网大厂MySQL面试高频考点)
  19. 运维工程师主要做什么_网络工程师和网络运维工程师到底有什么不同?
  20. supervisord 简介

热门文章

  1. java循环输入直到,使用循环接受其他用户输入,直到用户输入结束输入的值
  2. 2022年最新javaEE学习路线图
  3. 知道这些性能优化手段,工资起码提升一倍
  4. apache配置 index.php,修改apache配置文件去除thinkphp url中的index.php
  5. mdb批量导入mysql_快速将 access 用的 mdb 文件导入到 mysql 里
  6. php 405跳转,php – 返回HTTP 405的CORS预检请求
  7. Linux的slab和nginx的区别,Nginx核心知识100讲》nginx Slab管理器
  8. 深入浅出React Native 1: 环境配置
  9. CSS实现垂直居中的方法
  10. flow 静态类型检查 js