GC(垃圾回收器)中的算法
2024-09-06 00:49:15
- GC的两种判定方法
(1) 引用计数法
给对象添加一个引用计数器,每当引用一次+1,每次失效时-1,当计数器为0时,表示对象就是不可能再被使用的。
(2) 可达性分析算法
将“GC Roots”对象作为根节点,开始向下搜索,所走过的路径成为引用链。当一个对象到GC Roots没有任何引用链时,说明此对象是不可用的。
- 能作为GC Roots的对象
(1) 虚拟机栈中引用的对象
(2) 方法区中静态属性引用的对象
(3) 方法区中常量引用的对象
(4) 本地方法栈中JNI引用的对象
- GC的收集方法
(1) 标记清除算法
过程: * 标记阶段:先通过根节点,标记所有从根节点开始的可达对象,未被标记的视为垃圾对象
* 清除阶段:清除所有未被标记的对象
缺点: * 效率问题,标记和清除两个过程的效率都不高
* 空间问题,会产生大量不连续的内存碎片
(2) 复制算法
过程: * 将原有的内存空间分成两块,每次只使用其中一块,在垃圾回收时,将正在使用的内存中存活对对象复制到未使用的内存块中,然后清除正在使用的内存块中所有对象
缺点: * 浪费一半的内存
* 如果对象的存活率很高,复制要花很长时间
(3) 标记整理算法
过程: * 标记阶段:先通过根节点,标记所有从根节点开始的可达对象,未被标记的视为垃圾对象
* 整理阶段:将所有的存活对象压缩到内存的一端(或向另一端移动),之后清理边界所有的空间
缺点: * 效率也不高,不仅要标记存活对象,还要整理它们的引用地址
最新文章
- Javascript事件模型系列(二)事件的捕获-冒泡机制及事件委托机制
- React-Native 之控件布局
- RMAN-06059: expected archived log not found, loss of archived log compromises recoverability
- Android udev /dev 设备节点权限
- [Javascript] Object.freeze() vs Object.seal()
- Json部分知识(前台显示格式、Json-lib日期处理)
- ORA-07445 [mdagun_iter+957] When Using SDO_AGGR_UNION 问题处理
- SSDT表详解
- 《InsideUE4》UObject(四)类型系统代码生成
- linux-ubuntu下fastQC的安装
- Linux(3)用户和权限管理
- nginx学习笔记(三)
- read_csv报错Initializing from file failed
- 开关Windows休眠功能
- 发送邮件--MFMailComposeViewController
- PAT B1029 旧键盘 (20 分)
- 2017-2018-2 《网络对抗技术》 20155310 第二周 Exp1 PC平台逆向破解(5)M
- DotNetBar 使用笔记
- Linux kernel pwn notes(内核漏洞利用学习)
- android activity 窗口 样式