美文网首页Android科普知识库技术思维
科普|系统垃圾回收的时机是如何安排的?

科普|系统垃圾回收的时机是如何安排的?

作者: 蚍蜉一生 | 来源:发表于2024-05-28 19:33 被阅读0次

    在城市中,垃圾清理回收是一个非常重要的部门,它关乎着整个城市的健康运行,但进行垃圾清理需要占用道路、厕所、公园等空间,影响人们正常的出行和生活,所以进行垃圾清理的时机是非常重要的,比如城市街道,一般是凌晨大扫除,白天溜街零星打扫。
    垃圾清理回收的原则就是: 在保证城市健康运行前提下,尽量减少对正常出行和工作的影响。
    在虚拟世界中亦是如此——在保证系统健康运行前提下,最大限度的减少对其他业务的影响是垃圾回收机制进化的终极目标
    垃圾回收的时机是影响程序性能的一个重要因素,目前的大部分GC方案,都有stop the world- 就是暂停所有其他工作的步骤,过于频繁的GC会导致性能下降,而过于稀疏的GC可能导致内存不足,决定GC启动的时机涉及多个因素,包括内存使用情况、程序行为、GC策略等,常见的GC策略如下:
1. 到达使用阈值GC
    当内存使用达到一定比例或绝对值时,垃圾回收(GC)会被触发,这种策略的优点是实现简单,但可能会导致不稳定的性能,当前基本没有系统会单一使用这种策略。
    比如一个饭店,当桌子占满了(阈值是100%),所有服务员就暂停上菜、点单、欢迎客人等手头工作,大家一起清扫客人吃过的桌子,这样刚开始客人少的时候的确可以,但每次占满再清理都需要一个较长时间去打扫桌子,如果接下来客人很着急吃饭,就可能不来这里了。
2. 定期GC
    定期进行GC,实现简单,并可以减少突发的较长时间内存回收操作带来的影响,然而,固定时间间隔的GC在很多情况(比如在内存使用不均匀的应用中)下效率不高,一般是一些兜底策略或者辅助策略
    回到饭店的例子,鉴于之前的问题,老板思考后规定,所有服务员每隔五分钟,暂停下手头工作,检查各个桌子并清理客人吃完的桌子,这种情况下,只要时间间隔设置合理,每次清理也不会花太久时间,但比如一个大包间,是多人聚会区才会进来,一般一个聚会就要好几个小时,如何还是每隔五分钟去检查清理,那么就会白白浪费服务员的不少时间。

3. 分代分区GC
    分代垃圾回收(Generational Garbage Collection)就是基于对象生命周期的GC策略。分代GC将对象按照生命周期分为不同的代,如年轻代、老年代等。生命周期较短的对象进入年轻代内存区域,这个区域内存会频繁触发GC;生命周期较长,则进入老年代,这个代会较长时间进行一次,在这种策略下,垃圾的回收时机能够跟对象的生命周期实现更好的匹配,提升了系统整体性能,目前大多数虚拟机都是分代GC。
    继续我们饭店的例子,饭店运行一段时间后,老板发现吃饭的有两种客人,一种客人是吃个工作快餐,这种客人一般十分钟内就会吃完,还有一种客人是团队聚餐,他们一般是一堆人,一顿饭吃吃喝喝几个小时,于是老板让大家把就餐区分为两部分进行清理,一部分是快餐区,另一个部分是聚餐区, 新的客人按照就餐类型不同去不同区域就餐,每个区域新客人没有位置了,该区域就执行一次清理,同时快餐区10分钟检查清理一次,聚餐区60分钟检查清理一次,这种策略既降低了平均客人等待时间,又减少了服务员无用的检查次数,所以慢慢的所有饭店都效仿起来。
4. 手动GC
    尽管手动GC在现代语言中较少使用,但在特定场景下仍然有用,例如,在内存紧张或需要进行内存性能测试时,手动触发GC可以帮助开发者更好地控制内存使用。
    还是我们饭店的例子,目前的分区清理策略运行很好,但是中午时候,老板说卫生局30分钟后来检查卫生,大家都暂缓下手头工作,检查下店内卫生,吃完的餐桌尽快打扫干净,这就是进行了一次手动GC。

小结

    不管是在现实世界还是虚拟世界的中,垃圾回收的要求都是保证其他业务持续正常高效运行,避免内存等资源成为系统运行的短板
    目前AI技术日渐成熟,我们也可以在垃圾回收中引入AI,利用AI来动态识别具体场景,自动适配垃圾回收策略、自动适配各种阈值,构建适用更广泛、更高效的垃圾回收机制,哇,又是一个非常棒的主意!您有什么见解,评论区交流下。

相关文章

  • JVM垃圾回收

    GC垃圾回收流程 垃圾收集算法 垃圾回收算法 引用类型 垃圾回收的时机 1.垃圾收集算法 (1).引用计数算法含义...

  • 简单理解垃圾回收

    什么是垃圾回收? 垃圾回收的是什么? 如何判断为垃圾? 垃圾是怎样被回收的? 垃圾回收哪些区域的内存? 什么是垃圾...

  • 面试笔记-GC回收机制

    不写废话,帮助你快速理解应对面试 目录 垃圾的定义可达性分析GC Root对象回收的时机如何进行垃圾回收 标记清除...

  • 垃圾回收

    如何查看当前JVM使用的垃圾回收器? 如何指定使用CMS回收? 如何打印回收日志? 垃圾回收过程 CMS垃圾回收的...

  • C++/CLI中的确定性垃圾回收与mdl.net中Element

    C++/CLI中的确定性垃圾回收 托管语言中自动垃圾回收导致回收的时机是不确定的,只有托管C++实现了确定性的回收...

  • JVM-垃圾收集--标记(回收标准判定)

    垃圾收集的是哪个问题: 判断是否需要回收 回收时机 回收方法 需要垃圾收集的区域:方法区和堆区。因为栈、程序计数器...

  • 垃圾分类,人人有责

    睡前跟儿子讨论垃圾分类的问题,儿子很积极的给我科普了这些知识。 垃圾分为可回收垃圾和不可回收垃...

  • 华文慕课Java程序设计笔记

    对象的自动清除 对象回收是由垃圾回收线程负责 System.gc()方法可以要求系统进行垃圾回收,仅仅是建议系统 ...

  • JVM垃圾回收

    看到垃圾回收,首先你会想到什么? 1、什么是垃圾? 2、哪些地方的垃圾需要被回收? 3、如何定位垃圾? 4、如何回...

  • Java 垃圾收集(GC)浅谈

    Java 垃圾收集(GC)浅谈 为什么需要垃圾回收?哪些内存需要回收?什么时候回收?如何回收? 为什么需要垃圾回收...

网友评论

    本文标题:科普|系统垃圾回收的时机是如何安排的?

    本文链接:https://www.haomeiwen.com/subject/mmfkqjtx.html