浅析JS垃圾收集机制和内存管理

零到壹度
Lepaskan: 2018-04-04 14:36:24
asal
1172 orang telah melayarinya

这篇文章主要介绍了浅析JS垃圾收集机制和内存管理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  垃圾收集

  javascript中的垃圾收集机制很简单:找出那些不在使用的变量,然后释放他们.

    局部变量只存在在函数执行过程中,所以,当函数执行结束之后,局部变量就没有存在的必要了.但是并不是所有的变量都是那样容易判断的,所以要用一些方法来回收这些变量

    1 标记清除:

    javascript中最常用的垃圾收集方式是清除标记.当变量进入环境时,将这个变量标记为"进入环境",当变量离开环境时,将变量标记为"离开环境",一般来说,咱们只会清除带有离开环境标记的变量,因为已经没办法访问他们了.然后垃圾收集器来完成内存清除工作.

    2 引用计数:

    这个方法不是那么常用.引用计数的意思就是记录每个值被引用的次数,当被引用的次数减为0的时候,则说明再也没有办法访问那个值了,所以可以将它占用的内存释放.

    但是引用计数有一个问题:循环引用.举个例子:

    

function problem(){
var objectA = new Object();
var objectB = new Object();
objectA.someOtherObject = objectB;
objectB.anotherObject = objectA;
}
Salin selepas log masuk

在这个例子中,在这个例子中,objectA 和objectB 通过各自的属性相互引用;也就是说,这两个对象的引用次

数都是2。在采用标记清除策略的实现中,由于函数执行之后,这两个对象都离开了作用域,因此这种相互引用不是个问题。但在采用引用计数策略的实现中,当函数执行完毕后,objectA 和objectB 还将继续存在,因为它们的引用次数永远不会是0。假如这个函数被重复多次调用,就会导致大量内存得不到回收

为了避免这样的问题,咱们要在不使用他们的时候将他们置为null,以消除循环引用

内存管理:

我们都知道 分配给Web浏览器的可用内存数量通常要比分配给桌面应用程序的少。这样做的目的主要是出于安全方面的考虑,目的是防止运行JavaScript 的网页耗尽全部系统内存而导致系统崩溃。内存限制问题不仅会影响给变量分配内存,同时还会影响调用栈以及在一个线程中能够同时执行的语句数量。

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

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

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

相关推荐:

java垃圾回收机制、内存管理

JS的垃圾回收机制和内存分配

JavaScript垃圾收集机制及内存泄漏问题

Atas ialah kandungan terperinci 浅析JS垃圾收集机制和内存管理. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan