算法内功之剖析标记清除
标记清除算法:
首先是标记阶段,标记阶段通过GC root 分析对象是否需要回收,把需要回收的对象进行标记,完了再gc时进行回收。也是最基础的收集算法,其他几种都是在这个基础之上进行改进。
算法不足:
1效率问题,标记和清除的效率都不高。
2容易产生内存碎片,在分配对象时空间不足还会多次触发gc
算法图示如下所示:
算法内功之剖析复制算法
复制算法主要是为了解决效率问题,算法的思想是将内存划分为同样大小的两块,每次将存活的对象直接复制到另一边,把之前的不可达对象直接清理掉。然后移动堆顶指针,顺序分配就好。
算法图示如下所示:
但是我们用的jdk(1.8)为了更好的使用内存,复制算法并没有把内存分半,因为年轻代对象很快会销毁,所以把年轻代分为eden from to
如下面一段日志;
[GC (Allocation Failure) [PSYoungGen: 1870K->776K(14848K)] 22350K->21264K(49152K), 0.0031857 secs] [Times: user=0.00 sys=0.00, real