开始这一章节以前先问本身几个问题:咱们为何要学习这一章节?知道了GC 有什么好处?python
垃圾回收:
在将来的JDK中可能G1会为ZGC所取代算法
标记&清除ide
Java已经摈弃了这种算法,由于此算法须要的额外处理过多工具
【优】效率高,python也在用,就像论文的引用因子同样,没有用的文章就应该多多回收,清理学术垃圾。
【缺】没法处理对象的相互“循环引用”,一旦造成了引用环,就没有办法去解决。进而形成内存泄漏。学习
GC Roots = 起始节点集,从GC Roots开始向下搜索,链接的路径为引用链,GC Roots不可达的对象被判为不可用。优化
哪些是GC Roots?指针
【优】解决了循环引用的缺点
【缺】须要遍历对象
标记清除算法
复制算法
标记清除整理算法继承
先mark可达对象,从根节点开始进行线性遍历。
【优】够平均
【缺】效率不高,GC的时候致使STW,清楚后存在内存碎片(会存在一个空闲列表)进程
这是最快的清除算法
先把空间分为两个部分,把标记的对象规整地移到另外一个空间中(指针碰撞的方式)
【优】高效,无需mark/sweep;没有内存碎片;
【缺】牺牲了大量的空间,”最好大家所有是垃圾!“
在标记以后清除完了再进行整理,属于标记清除算法的优化版,无空闲列表
【优】无空闲列表,无内存碎片;空间开销低
【缺】时间慢,须要进行屡次操做。
finalize是给GC调用的
【问】回收的时候会涉及到哪些操做?会伴随着什么状态?
Memory Analyzer Tools 内存分析工具
分析dump文件:根据GC Roots去溯源,监控内存泄漏→ JProfiler
将堆空间分红小空间是为了下降停顿时间,下降延迟
实际的使用都是复合算法。
final是写死的,不能继承也不能作任何修改;
Serializable修饰是跨进程
Comparable可比较的