我的github地址
JavaScript中基础的回收机制是引用计数的方式,也是其他很多语言或者游戏引擎中使用的一种基础的垃圾回收机制,(比如cocos2dx中基础类型object就是使用引用计数的方式,每一帧开始时候会把上一帧的所有东西遍历,如果有引用计数为0的,就直接销毁了,在当前帧的时候,如果手动进行释放(如delete),reference变成0了,就直接销毁对象。)(比如egret中也是使用的引用计数的方式)
而引用计数的方式不可避免的就是互相引用的问题。既一个东西引用了另一个东西,而它又引用了第一个,两个的引用计数都增加了,导致引用计数互相持有一个,无法释放,典型的就是js中的闭包(许多网上提到的,其实所有互相引用的道理都一样,比如对象中的成员变量引用一个东西,但是那个东西没被释放一样)。
function test() {
let param1 = new Obj() ;
param1.OnTouch = function () {
let shit = param1.shit;
return shit ;
}
}
function test() {
let param1 = new Obj() ;
let p1 = param1.shit;
param1.OnTouch = function () {
let shit = 1;
return shit ;
}
}
之后再进行验证和整理
参考
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Memory_Management
https://segmentfault.com/a/1190000002778015
这里有一篇别人写的关于javaGC的
http://geek.csdn.net/news/detail/193654