JavaScript内存管理——优化内存占用
使用具备垃圾收集机制的语言编写程序,开发人员一般不必操心内存管理的问题。但是,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内存管理——优化内存占用相关推荐
- 【手游开发优化篇】cocos2d-x内存管理优化(内存是游戏的硬伤)
2014年05月24日更新 以前的关注点都是 怎么用 根本没有往深层次追踪过.为什么这么用.今天记录下: 如果我们用的是pvr.ccz的图片 加载到内存中是根据你到处是的像素格式来渲染到ui中.如到处 ...
- C++ 内存管理中内存泄漏问题产生原因以及解决方法
C++内存管理中内存泄露(memory leak)一般指的是程序在申请内存后,无法释放已经申请的内存空间,内存泄露的积累往往会导致内存溢出. 一.内存分配方式 通常内存分配方式有以下三种: (1)从静 ...
- Linux内存管理:内存寻址之分段机制与分页机制
目录 Linux 内存寻址之分段机制 前言 分段到底是怎么回事? 实模式的诞生(16位处理器及寻址) 保护模式的诞生(32位处理器及寻址) IA32的内存寻址机制 寻址硬件 IA32的三种地址 MMU ...
- Linux内存管理:内存分配:slab分配器
<linux内核之slob.slab.slub> <Linux内核:kmalloc()和SLOB.SLAB.SLUB内存分配器> <Linux内存管理:内存分配:slab ...
- Linux内存管理:内存描述之高端内存
<Linux内存管理:内存描述之内存节点node> <Linux内存管理:内存描述之内存区域zone> <Linux内存管理:内存描述之内存页面page> < ...
- Linux内存管理:内存描述之内存页面page
<Linux内存管理:内存描述之内存节点node> <Linux内存管理:内存描述之内存区域zone> <Linux内存管理:内存描述之内存页面page> 目录 1 ...
- 内存分配器 mysql_聊MySQL内存管理,内存分配器,操作系统
推荐(免费):mysql视频教程 当用户在使用任何软件(包括MySQL)时遇到内存问题,我们的第一反应就是内存泄漏.正如本文所示,情况并非总是如此. 本文描述了一个关于内存的bug. 所有Percon ...
- C++内存管理__内存管理(栈、堆(new/delete)、自由存储区(malloc/freee)、全局/静态存储区、常量区)!堆栈内存管理方式的区别
内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄 ...
- 内存分配器 mysql_MySQL内存管理,内存分配器和操作系统的示例分析
MySQL内存管理,内存分配器和操作系统的示例分析 发布时间:2021-01-08 14:06:39 来源:亿速云 阅读:79 作者:小新 这篇文章主要介绍MySQL内存管理,内存分配器和操作系统的示 ...
最新文章
- 关于JVM,你需要掌握这些!!
- python自动化测试看什么书-《自动化平台测试开发-Python测试开发实战》新书出版了...
- 深入浅出python机器学习_4.3.1_岭回归的原理 4.3.2_岭回归的参数调节
- 点云数据生成三维模型_可直接编辑的高质量3D生成模型:三维深度生成方法SDM-NET...
- 开发Adobe AIR的原生扩展
- 检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败
- 暗黑的字符串---递推公式
- linux下测试权限,linux 文件权限
- 注册表清理工具PC Performer
- 关于我国高等数学教材的版权发财户
- 关于get方式提交中文乱码问题的解决方式
- 2019新版《龙果学院JavaEE秒杀系统企业级实战应用教程》
- python 应用程序无法正常启动 000007b_Win7应用程序无法正常启动0x000007b怎么办?...
- 向日葵公主与驴的爱情故事
- [渝粤教育] 长沙民政职业技术学院 高职公共英语(三) 参考 资料
- 那些花儿(吉他版) --朴树
- Python微信机器人之Python _ithcat 持续登陆错误 KeyError: ‘User’
- 秋招来袭,想学习Java进大厂的小伙伴,这7点武林秘籍一定要点开看看!(附一线互联网大厂MySQL面试高频考点)
- 运维工程师主要做什么_网络工程师和网络运维工程师到底有什么不同?
- supervisord 简介
热门文章
- java循环输入直到,使用循环接受其他用户输入,直到用户输入结束输入的值
- 2022年最新javaEE学习路线图
- 知道这些性能优化手段,工资起码提升一倍
- apache配置 index.php,修改apache配置文件去除thinkphp url中的index.php
- mdb批量导入mysql_快速将 access 用的 mdb 文件导入到 mysql 里
- php 405跳转,php – 返回HTTP 405的CORS预检请求
- Linux的slab和nginx的区别,Nginx核心知识100讲》nginx Slab管理器
- 深入浅出React Native 1: 环境配置
- CSS实现垂直居中的方法
- flow 静态类型检查 js