GC垃圾回收
垃圾回收
哪种内存需要回收?
什么时候回收?
怎么回收?
如何判断一个对象可以回收?
可达性分析算法
通过一个GC Roots
的对象向下查找,整个搜索路径叫做引用链,当一个引用链没有 任何GC Roots
说明可以回收了
可以作为GC-Roots的对象
方法区中静态变量所引用的对象
虚拟机栈中所引用的对象
引用计数法
每当有一个对象被引用时,引用计数器就+1,当失效时就-1,什么时候为0说明就可以回收了, 无法解决循环引用的问题
怎么回收?
标记清除算法
将不需要回收的对象
做一个标记,然后清除可以回收的对象
标记和清除的效率不高
容易产生不连续的内存
复制算法(新生代)
标记整理算法 (老年代)
原理和标记清除算法
类似, 只是最后一步的清除改为了将存活对象全部移动到一端,
分代回收算法
现代多数的商用 JVM 的垃圾收集器都是采用的分代回收算法,和之前所提到的算法并没有新的内容。
Last updated
Was this helpful?