什么是垃圾?
- 一般而言, 没有被引用的变量就是垃圾, 会被清除;
- 有一个例外, 如果几个对象互相引用, 形成了一个闭环. 虽然有引用, 但是也是垃圾.
垃圾清除算法
标记清除-常用
- 会标记内存中存储的所有变量;
- 然后,它会将所有在上下文中的变量,以及被在上下文中的变量引用的变量的标记去掉。
- 在此之后再被加上标记的变量就是待删除的了
- 原因是任何在上下文中的变量都访问不到它们了。
- 随后垃圾回收程序做一次内存清理,销毁带标记的所有值并收回它们的内存。
引用计数
- 每次一个对象被引用的时候, 就会加一;
- 再被引用的时候, 再加一;
- 有人不引用的时候, 就减一,
- 当减到0的时候, 这个对象就会被清除回收
清除时间
- 当使用以上两种算法, 满足回收条件时, 并不会被立即回收 ;
- 垃圾回收机制会定期(周期性)找出那些不再用到的内存(变量),然后释放其内存。