垃圾回收算法
标记-清除
记录垃圾对象占用内存的起始结束地址,放到空闲的地址列表里
优点:速度快
缺点:容易产生内存碎片
标记-整理
标记清除后把可用的内存向前移动整理,使内存更紧凑,有更多的连续内存地址
优点:没有内存碎片。
缺点:由于整理过程中需要移动,所以效率较低,速度慢。
标记-复制
将内存区域划分成大小相等的两块区域,标记from区的可以内存,复制到to区时整理,然后清除from区,最后交互两个区。
优点:不会产生内存碎片
缺点:占用双倍的内存空间
3.分代垃圾回收
长时间使用的对象放在老年代,用完了就可以丢弃的对象就放在新生代
- 对象首先分配在伊甸园区域
- 新生代空间不足时,触发minor gc,伊甸园和from存活的对象使用copy复制到to中,存活的对象年龄加1并且交换from to
- minor gc会引发stop the world,暂停其它用户的线程,等垃圾回收结束,用户线程才恢复运行
- 当对象寿命超过阈值时,会晋升至老年代,最大寿命是15(4bit)
- 当老年代空间不足,会先尝试触发minor gc,如果之后空间仍不足,那么触发full gc,STW的时间更长
- 如果放大对象,当老年代空间足够,而新生代空间不够的时候,会不触发GC直接将大对象放到老年代。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界