• 标记清除( mark and sweep )
这是 JavaScript 最常见的垃圾回收方式 。 当变 量进入执行环境的时候,比如在函数
中声明 一个变量,垃圾回收器将其标记为“进入环境 ” 。 当变 量离 开环境的时候(函数执
行结束),将其标记为“离开环境”。
垃圾回收器会在运行的时候给存储在内存中的所有变量加上标记,然后去掉环境中
的变量,以及被环境中变量所引用的变量 (闭包)的标记 。 在完成这些之后仍然存在的
标记就是要删除的变量 。
• 引用计数( reference counting)
在低版本的 IE 中经常会发生内存泄漏,很多时候就是因为它采用引用计数的方式进
行垃圾回收 。 引用计数的策略是跟踪记录每个值被使用的次数 。 当声明了 一个变量并将
一个引用类型赋值给该变量的时候 , 这个值的引用次数就加 l 。 如果该变量的值变成了
另外 一个,则这个值的引用次数;或 l 。 当这个值的引用次数变为 0 的时候,说明没有变
量在使用,这个值没法被访问 。 因此 , 可以将它占用的空间回收 ,这样垃圾回收器会在
运行的时候清理引用次数为 0 的值占用的空间 。
在 IE 中虽然 JavaScript 对象通过标记清除的方式进行垃圾回收,但是 BOM 与 DOM 对象
是用引用计数的方式回收垃圾的 。 也就是说 , 只要涉及 BOM 和 DOM , 就会出现循环引用问题。
Copyright © 2022 All Rights Reserved 版权所有 豫商人才网 豫ICP备19004769号
地址:河南省商丘市睢阳区神火大道176号联合大厦13楼 EMAIL:postmaster@37jobs.com