Open madfour opened 3 years ago
垃圾回收机制,就是找出那些不再继续使用的值,然后释放其占用的内存空间。垃圾回收器每隔固定的时间段就执行一次释放操作。
有两种最为常用:标记清除和引用计数,其中标记清除更为常用。
标记清除(mark-and-sweep)
垃圾回收器会在运行时给存储在内存中的所有变量加一个标记,然后去除环境中的变量以及被环境中的变量所引用的变量(闭包)在这些完成后仍存在标记的就是要删除的变量了,因为环境中的变量已经无法访问到这些变量了
引用计数法(跟踪记录每个值被引用的次数。)
引用计数的含义是跟踪记录每个值被引用的次数。当声明了一个变量并将一个引用类型赋值给该变量时,则这个值的引用次数就是1。相反,如果包含对这个值引用的变量又取得了另外一个值,则这个值的引用次数就减1。当这个引用次数变成0时,则说明没有办法再访问这个值了,因而就可以将其所占的内存空间给收回来。这样,垃圾收集器下次再运行时,它就会释放那些引用次数为0的值所占的内存。
function problem() { var objA = new Object(); var objB = new Object(); objA.someOtherObject = objB; objB.anotherObject = objA; }
在这个例子中,objA和objB通过各自的属性相互引用;也就是说这两个对象的引用次数都是2。在采用引用计数的策略中,由于函数执行之后,这两个对象都离开了作用域,函数执行完成之后,objA和objB还将会继续存在,因为他们的引用次数永远不会是0。这样的相互引用如果说很大量的存在就会导致大量的内存泄露。
减少垃圾回收,并且尽量避免循环引用。
js垃圾回收机制
回答:
垃圾回收机制,就是找出那些不再继续使用的值,然后释放其占用的内存空间。垃圾回收器每隔固定的时间段就执行一次释放操作。
垃圾回收方式
有两种最为常用:标记清除和引用计数,其中标记清除更为常用。
标记清除(mark-and-sweep)
垃圾回收器会在运行时给存储在内存中的所有变量加一个标记,然后去除环境中的变量以及被环境中的变量所引用的变量(闭包)在这些完成后仍存在标记的就是要删除的变量了,因为环境中的变量已经无法访问到这些变量了
引用计数法(跟踪记录每个值被引用的次数。)
引用计数的含义是跟踪记录每个值被引用的次数。当声明了一个变量并将一个引用类型赋值给该变量时,则这个值的引用次数就是1。相反,如果包含对这个值引用的变量又取得了另外一个值,则这个值的引用次数就减1。当这个引用次数变成0时,则说明没有办法再访问这个值了,因而就可以将其所占的内存空间给收回来。这样,垃圾收集器下次再运行时,它就会释放那些引用次数为0的值所占的内存。
在这个例子中,objA和objB通过各自的属性相互引用;也就是说这两个对象的引用次数都是2。在采用引用计数的策略中,由于函数执行之后,这两个对象都离开了作用域,函数执行完成之后,objA和objB还将会继续存在,因为他们的引用次数永远不会是0。这样的相互引用如果说很大量的存在就会导致大量的内存泄露。
常见内存泄露的原因
如何减少垃圾回收开销
减少垃圾回收,并且尽量避免循环引用。