JVM(4)—垃圾回收与算法
1 如何确定垃圾
(1)引用计数法:一个对象没有任何有关联的引用,则这个对象就是可回收对象。
(2)可达性分析:为了解决引用计数法的循环引用问题,GC roots和对象之间没有可达路径,则该对象是不可达的。经过两次标记如果都是可回收对象,则进行回收。
2 垃圾回收算法
(1)标记清除算法:分为标记和清除两个阶段。最大的问题是内存碎片化严重,后续大的对象可能找不到利用空间的问题。
(2)复制算法: 为了解决内存碎片化的问题。把内存分为两块,一块对象满了之后,将其存活的对象复制到另一块上去。问题是存储空间被压缩到原来的一半。存活对象较多,复制算法效率会大大降低。
(3)标记整理算法: 先标记存活对象,然后将存活对象移向内存的以便,然后清楚边界外的对象。
(4)分代回收算法: 将内存划分为不同的域,分为老生代和新生代。老生代一半回收垃圾只有少量对象被回收,新生代每次都有大量的垃圾需要被回收。
新生代使用复制算法,每次垃圾回收将Eden区和from区存活的对象复制到to区中。
老年代使用标记整理算法,因为老年代每次需要回收的对象较少。当新生代 to 区对象满了以后,或者年龄满足条件之后(一半wei15)则会被移到老年代中。
浙公网安备 33010602011771号