JavaScript中的内存管理

JavaScript中的内存管理

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

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

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

上述代码中,变量globalPerson取得了createPerson()函数返回的值。在createPerson()函数内部,我们创建了一个对象并将其赋值给局部变量localPerson,然后又为该对象添加了一个名为name的属性。最后,当调用这个函数时,localPerson以函数值的形式返回并赋值给全局变量globalPerson。由于localPerson在createPerson()函数执行完毕后就离开了其执行环境,因此无需我们显式地去为它解除引用。但是对于全局变量globalPerson而言,则需要我们在不使用它的时候手工为为它解除引用。

不过,解除一个值的引用并不意味着自动回收该值所占用的内存。解除引用的真正作用是让值脱离执行环境,以便垃圾处理器下次运行时将其回收。

程序员专用的几个高质量 Chrome 插件

当然,就是从提高自己的效率开始,为自己减轻压力,节省更多时间去做别的事。今天我就给大家推荐几个,我个人感觉用的不错的,能够提高效率的,而且是有关程序员工作使用的Chrome浏览器插

PHP和Python如何选择?或许可以考虑这三个问题

文/黄小天、李亚洲 (选自ackernoon 机器之心编译) 年可谓是网页应用与 之年,开发者不用每次重新发明轮子,而是利用脚手架和第三方库就能确保项目在几天内实时部署。尽管 ful 和跨平台库已经使网页开发容易起来,但依然没有解决阻碍并隔分开发者、管

JavaScript中的内存管理

使用具备垃圾收集机制的语言编写程序,开发人员一般不必关心内存管理的问题。但是,JavaScript在进行内存管理及垃圾收集时面临的问题还是有点与众不同的。

回顾游戏中的设计模式:策略模式vs抽象工厂

最近有时间看看设计模式方面的书,好多东西时间久了不看就变得生疏起来, 在这里会抽出时间把自己在工作中使用过的设计模式做下总结。刚才在看到别人说,简单工厂模式是“通过提供单独的一个类,来实现创建实例对象的过程”,可以使用反射来替换掉程序中的switch/if

什么是独立游戏?独立VS商业(欢迎来参与讨论)

由在读的开发者李姬韧创作的文章,内容丰富,亮点颇多,适合所有想学习游戏策划的同学们。经作者授权在知乎专栏“游戏设计梦工厂”和ndie同步首发。在美国,早期的独立游戏概念是相对于主机平台上高成本大团队的作品而言的。但是这些年,独立游戏和整个游戏市场经过大量的