垃圾收集
怎样判断对象存活
引用计数法
- 实现难度较小
- 无法解决循环依赖
可达性分析
- 实现较为复杂
- 当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。不可达对象。
- 可作为GC Roots:
-
虚拟机栈中引用的对象。
-
方法区中类静态属性实体引用的对象。
-
方法区中常量引用的对象。
-
本地方法栈中JNI引用的对象。
-
垃圾收集算法
标记-清除法
标记- 复制
标记-整理
分代收集法
大多数的对象都是朝生夕死的
- 对于新生代,主要采用标记-复制法,因为存货的对象是极少的
- 而对于老年代,存活的对象较多,就需要使用标记清除,标记复制法
经典垃圾收集器
古老的串行收集器 Serial
- 垃圾收集操作是串行化的 在收集时会停止其他进程
- 在新生代使用 标记-复制法
- 老年代使用 标记-整理法
parNew 串行收集器的后继者
- 在收集新生代时使用并行收集
- 在老年代使用串行收集
Parallel收集器 类似于parNew的垃圾收集器
- 关注的是系统的吞吐量 并且可以使用参数来设置系统的吞吐量
Parallel Old 收集器
- 在老年代使用并行收集 并且依旧使用标记整理法
CMS收集器 最速传说
- 已获得最短的系统停顿时间为目标
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?