1>垃圾回回收机制:垃圾回收器会定期找出那些不在继续使用的变量,然后释放内存
2>标记清除(最常用的垃圾回收机制):一个变量进入环境就标记为“进入环境”,当变量离开环境是可以标记为“离开环境”(可以设置“进入环境”变量的列表和“离开环境”的列表),垃圾回收器会给内存中所有的变量加上标记,然后他会去掉环境中的变量和环境引用的变量的标记,在此之后再被加上标记的变量就是准备被删除的变量,因为环境中的变量已经无法访问这些变量了,最后垃圾回收器完成内存清除工作。
3>引用计数:跟踪记录每个变量被引用的次数。当这个值被引用的次数为0时,就可以释放这块内存。当声明一个变量并将一个引用类型的值付给这个变量,则这个值引用次数加一,如果同一个值被赋给另一个变量,该值引用次数加1,相反,如果包含这个值的变量又取得了另一个值则减一。
4>触发垃圾回收机制:如果垃圾回收器回收的内存分配量低于程序占用内存的15%,说明大部分内存不可被回收,设的垃圾回收触发条件过于敏感,这时候把临界条件翻倍,如果回收的内存高于85%,说明大部分内存早就该清理了,这时候把触发条件置回。
5>GC缺点:响应时间长(100ms甚至以上)。在进行GC时,停止响应其他操作(对js游戏动画影响比较大)
6>优化方案:
1>分带回收:“临时对象”和“持久对象”,少回收持久对象,多回收临时对象,减少每次需要遍历的对象,从而减少GC响应时间
2>增加GC:“每次处理一点,每次处理一点”,虽然减少响应时间,但是带来了上下文频繁切换的问题