js标记清楚的过程怎么回事

慕神8447489
浏览 899回答 2
2回答

慕虎7371278

环境中的变量你可以理解为正在使用的变量。这句话的意思是说,先认为所有对象都是要清除的,然后遍历正在使用的那些对象,以及由那些对象所引用的其他对象。所有这些对象都找出来之后,剩下的就是没有在使用的对象了,就可以被垃圾回收了。标记清除的好处就是可以解决循环引用问题。a和b相互引用,引用计数都是1,所以只用引用计数的话两个都没办法回收。但是用标记清除就可以。标记有用对象的过程其实就是可达测试的过程。你可以想象整个内存是一个大海,每个对象都是一个岛屿,相互之间用大桥连接,现在要找出与大陆相连的岛屿,那么就从大陆出发,依次标记所能达到的每个岛屿,最后没有被标记到的岛屿就是孤岛,可以当垃圾清除掉。即使两个孤岛之间相互有桥连接也没用,因为与大陆不通啊。这个大陆就是应用程序,或者说是应用程序里的根对象。每次遍历的时候都是从这个根对象出发的。不知道这么说你能明白吗?最后再来说说你题目里那个例子。你那个例子是不恰当的,因为abc三个变量都是临时变量,存在于栈中,会自动回收。它们的值是原始类型,不是对象,因此也不存在垃圾回收的问题。记住垃圾回收只作用于对象。所以你的例子
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript