Java后端
·2024-06-26【工作两年搬砖码农的自我救赎之路】
不知道能坚持几天,坚持一天算一天[拳头][拳头]day1打卡
《https://wx.zsxq.com/mweb/views/weread/search.html?keyword=深入理解java虚拟机》67-83页
1. 如何判断对象已死?
1.1. 引用计数算法
1.1.1. 在对象中添加一个引用计数器,如果有一个地方引用它,计数器就加1;引用失效时就减1。任何时候计数器为0就表示对象不可能再被使用
1.1.2. 缺点:不好解决对象相互引用的问题
1.2. 可达性分析算法
1.2.1. 从GC ROOTS开始向下搜索,走过的路径为“引用链”。当某一个对象到GC ROOTS没有引用链时,表示对象不可能再被使用
2. 生存还是死亡?
2.1. 要确定一个对象真正死亡,需要经过两次标记过程
2.2. 第一次:使用可达性分析算法,满足对象到GC ROOTS没有引用链时候,标记一次
2.3. 第二次:判断此对象是否有必要执行finalize()方法。注:finalize()方法会在对象被回收时被系统主动调用一次且仅仅会调用一次
3. 垃圾回收算法
3.1. 标记-清除算法
3.1.1. 标记出所有需要回收的对象然后统一回收所有被标记的对象
3.1.2. 缺点:执行效率不稳定、会产生内存空间碎片化问题
3.2. 标记-复制算法
3.2.1. 将可用内存按容量划分为大小相等的两块,每次只使用其中一块,当这一块内存用完了,就将还存活的对象复制到另一块,然后把已使用过的内存空间一次清理掉
3.2.2. 缺点:将可用内存缩小了一半,造成空间浪费
3.3. 标记-整理算法
3.3.1. 跟标记-清除算法很像,只不过这种是移动式的回收算法
3.3.2. 标记过程和标记-清除算法一样,都是先全部标记,但是后面不是直接怼可回收对象进行清理,而是让所有存活的对象都向内存空间一段移动,然后清理掉边界以外的内存
4. HotSpot算法细节实现
4.1. 根节点枚举
4.2. 安全点
4.3. 安全区域
4.4. 记忆卡和卡表
4.5. 写屏障
4.6. 并发的可达性分析
0
0
分享
操作
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
