GC 垃圾回收
1960年List使用了GC
java中GC的对象是堆空间和永久区(hotspot虚拟机)
GC:处理的问题:什么对象该GC,怎么GC,什么时候GC
gc算法:(判断GC对象)
判断对象是否存活
1 引用计数法(COM,Python,ActionScript){很难处理循环引用的问题}
2可达性算法。(可触及,不可触及,可复活{finalize只会被调用一次如果这次没有被复活,就不可及了。finalize优先级比较低,调用具有不确定性})
3什么是根对象:1java虚拟机栈中的引用的对象2方法区中的静态成员或者常量
回收算法
3标记清除法(从根节点先标记可达对象,然后清除未被标记的对象)
4标记压缩算法(从根节点先标记可达对象,移动存活对象,清除存活界限外的对象)
5复制算法是标记清除算法的改进。不适用于存活对象较多的场景。将原有的空间分为2部分,每次只使用一块,垃圾回收的时候吧存活的对象复制到另一块,之后清除正在使用的那一块。(内存浪费严重)交换空间使用权即可
6分带思想:
短命的对象适用于复制算法
存活率高的对象适用于标记清除或者标记压缩
Stop-The-World:
java中全局暂停现象
多半由于GC产生