1,概述
哪些内存需要回收?
什么时候回收?
如何回收?
2,如何确定对象是否可以被回收?
引用技术算法
优点:实现简单,
缺点:无法解决互相引用的问题.
可达性分析算法
3,对象的引用分类?
强引用
弱引用
软引用
虚引用.
4,回收方法区
回收常量
该常量没有被引用,就可以被回收
回收类
如何确定类是否可以被回收?
A,该类的所以实例没有被引用,
B,该类的classloader已经被回收
C,该类的class对象已经被回收
5,垃圾回收算法
标记清除
复制算法
标记-整理算法
算法名称 | 概述 | 优点 | 缺点 |
标记-清除 | 分为两个阶段: 1,标记,标记已经没有被引用的对象 2,清除:直接清除对象 | 1,简单,效率高 | 内存空间不连续 |
复制算法 | 1,将内存空间分为两块, 2,直接将依然被引用的对象copy到另一块, 3,清除未被引用的对象. | 1,内存空间连续 | 1,由于将内存分为两部分,内存使用率下降. |
标记-整理算法 | 上述两种算法的集合. | ||
分代搜集算法. | 年轻代-复制算法 老年代-标记整理算法 |
6,垃圾回收器
年代 | 所处区域 | 回收算法 | 回收器 | 概述 | 优点 | 缺点 |
年轻代 | 堆 | 标记-整理 | 串行回收器(单线程) | 1,实现简单, 2,效率高. | 性能差 | |
标记-整理 | 并行回收器(多线程) | |||||
复制算法 | Parallel New 收集器 | 1,吞吐量很高 | ||||
老年代 | 堆 | 标记整理 | 串行回收器(单线程) | 1,实现简单, 2,效率高. | 性能差 | |
标记-整理 | Parallel old 收集器 | 1,吞吐量很高 | ||||
标记清除算法 | CMS(concurrent mark sweep) | 四个阶段: 1,初始标记:标记一下GC Roots能直接关联到的对象 2,并发标记: 进行GC roots追踪的过程 3,重新标记:垃圾回收和用户进程是并发进行,因此需重新标记并发期间的用户数据,这个期间仅仅运行垃圾回收线程 4,并发清除.清除标记的数据 | 高并发,低延迟 | 1,会产生大理垃圾碎片 2,由于并发,对CPU敏感,吞吐量降低. 3,由于并发,无法处理浮动垃圾 | ||
G1回收器 | 1,初始标记 2,并发标记 3,最终标记 4,,筛选回收 | |||||
永久代 | 方法区 | 1,常量池, 2,类卸载,回收 |
7,内存分配回收策略