JAVA中的GC
回收算法包括:
引用计数法(未使用)
根据引用 计数是否为0来判断是否需要回收该空间,因会造成循环引用 ,而在JAVA中未使用
标记-清除
从根节点标记有引用 的空间,清除未引用 的空间,
容易造成空间碎片
复制算法
将空间分为两部分,将有引用 的空间复制到另外一块,再清除所有,交替使用两块空间
有数据复制效率问题,另外空间被一分为二,可用空间数减少
标记-整理
将标记有引用 的空间整理到未使用的空间中
整理效率的问题
增量回收
每次只回收部分,减少gc线程影响正常工作的效率
分代回收
堆中内存分为新生代,老生代
新生代中通常垃圾多于存活对象
老生代中通常存活对象多于垃圾
所以:
新生代-复制算法
老生代-标记整理算法
此外,工作模式上,还有
串行回收(单线程)
并行回收
并发式回收(与正常工作线程并发执行)
独占式回收(GC工作时,暂停工作线程)