GC垃圾回收
2024-05-23 16:29:37 30 举报
AI智能生成
GC垃圾回收机制
作者其他创作
大纲/内容
如何判断某个对象是垃圾
引用计数算法
通过判断对象的引用数量来决定是否要回收
每一个对象实例都有一个计数器,当被引用时+1,完成引用则-1
引用计数为0的对象被当作垃圾回收
可达性分析算法
通过判断对象的引用链是否可达来觉得对象是否要被回收
通过一系列的称为GC Root 的对象作为起点
栈中的引用对象
方法区中的常量引用对象
方法区中的静态属性引用对象
本地方法中的引用对象
活跃线程中的引用对象
从这些节点向下搜索,节点所走过的路径称为引用链
当一个对象没有被任何引用链相连,则证明它是不可达的,即被垃圾回收
垃圾回收算法
复制算法
将内存分为两个部分from to
将对象储存在to,并且将from中的对象存储到to
然后将from 和to交换位置, from变为to,头变为from ,to中永远为空
标记清除算法
标记:从根集合进行扫描,对存活对象进行标记
清除:对堆内存进行遍历,回收没有标记对象
缺点:会产生大量内存碎片,无法存储较大对象
标记压缩(标记整理)算法
标记清除算法优化将内存碎片进行整理移动
影响性能,代价较大
分代算法(不同内存区采用垃圾回收算法不同)
年轻代:使用复制算法
老年代:使用标记清除,标记压缩(整理)算法
垃圾收集器种类
Serial Old 收集器(标记整理算法)
单线程收集,进行垃圾会收集时,必须是单线程
ParNew Old 收集器(标记整理算法)
多线程收集,垃圾收集的工作线程可同时执行,吞吐量优先
CMS 收集器(标记清除算法)
垃圾回收线程和用户线程几乎可以同时工作
0 条评论
下一页