关注
垃圾回收机制
- 作用:自动回收不再使用的内存,避免内存泄漏,使程序员无需手动管理内存,提高开发效率和程序稳定性。
- 实现方式:主要有标记-清除、复制、标记-压缩、分代收集等算法。标记-清除算法先标记垃圾对象,再回收;复制算法将存活对象复制到新区域,清空原区域;标记-压缩先标记,再将存活对象压缩到一端;分代收集根据对象存活周期不同分代管理和回收。
- 重要性:确保内存有效利用,防止内存碎片过多,维持系统性能稳定,避免因内存问题导致程序崩溃或出现异常。
Young GC和Full GC的区别
- 回收区域:Young GC主要处理年轻代,年轻代分为Eden区和Survivor区。Full GC则针对整个堆内存,包含年轻代、老年代和永久代(Java 8前)或元空间(Java 8及以后)。
- 触发条件:Young GC通常在Eden区满时触发。Full GC触发条件有老年代内存不足、元空间内存不足、显式调用 System.gc() 、大对象直接进入老年代导致空间不够、晋升对象大小超过Survivor区剩余空间等。
- 回收算法:Young GC一般采用复制算法,效率高。Full GC可能采用标记-清除、标记-压缩等算法,根据堆内存不同区域特点选择。
- 回收时长和频率:Young GC频率高,每次回收时间短。Full GC频率低,但耗时久,对系统性能影响大,因为要扫描整个堆内存。
- STW(Stop-The-World)影响:Young GC产生的STW时间相对短,Full GC的STW时间较长,会导致应用程序暂停响应。
如何判断对象是否是垃圾
- 引用计数法:对象有一个引用计数器,每有一个引用指向它,计数器加1,引用失效则减1,为0时可回收。优点是简单高效,缺点是无法解决循环引用,会造成内存泄漏。
- 可达性分析法:以GC Roots为起点,通过引用链遍历,不可达的对象为垃圾。GC Roots包括虚拟机栈局部变量表、方法区类静态属性和常量引用的对象、本地方法栈JNI引用的对象等。此方法能解决循环引用问题,是主流判断方式。
- finalize()方法:对象可重写 finalize() 方法,在被回收前会执行此方法。可在方法中让对象重新与引用链上的对象关联,避免被回收,但不建议过度依赖,因为执行时机不确定。
查看原帖
1 评论
相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享

点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 摸鱼被leader发现了怎么办 #
43729次浏览 317人参与
# 找工作,行业重要还是岗位重要? #
16989次浏览 286人参与
# 潍柴工作体验 #
19664次浏览 17人参与
# 来聊聊机械薪资天花板是哪家 #
112240次浏览 721人参与
# 你觉得通信/硬件有必要实习吗? #
94471次浏览 893人参与
# 你最满意的offer薪资是哪家公司? #
17915次浏览 119人参与
# 硬件兄弟们 甩出你的华为奖状 #
95258次浏览 670人参与
# 金融财会交流会 #
100906次浏览 361人参与
# 机械人与华为的爱恨情仇 #
105434次浏览 923人参与
# 外包能不能当跳板? #
25161次浏览 192人参与
# 24届硬件人与华为的爱恨情仇 #
120034次浏览 962人参与
# 运营面经 #
101146次浏览 1202人参与
# 机械人怎么评价今年的华为 #
190474次浏览 1502人参与
# 大疆求职进展汇总 #
471311次浏览 3178人参与
# 国企还是互联网,你怎么选? #
126423次浏览 963人参与
# Offer比较,求稳定还是求发展 #
41525次浏览 227人参与
# 盲审过后你想做什么? #
15990次浏览 121人参与
# 设计人如何选offer #
101116次浏览 697人参与
# 国企/银行/研究所公司爆料 #
123816次浏览 742人参与
# 机械专业只有考研才有出路吗 #
95323次浏览 850人参与