垃圾收集算法、垃圾收集器

垃圾收集算法

为什么要有GC 

  • 自动监测对象是否超过作用域从而达到自动回收内存的目的

Java垃圾回收机制

  • Jvm中,有一个垃圾回收线程,它的优先级很低的线程,正常情况下它是不会触发执行的,只有当虚拟机空闲或者内存不足的时候,才会回收没有任何引用的对象 

垃圾收集器可以马上回收内存吗? 

  • 通过system.gc()提醒虚拟机:希望进行一次垃圾回收,但是它不能保证垃圾回收一定会进行。 

GC算法

  1. 标记-清除算法:标记出所有需要回收的对象,在标记完成后统一回收掉所有标记的对象
  2. 复制算法:将内存划分为大小相等的两块,每次只是用其中一块,当一块用完了,就将还存活着的对象复制到另一块上,然后再把用完的那块一次性清理掉
  3. 标记-整理算法:标记所有存活的对象,让其移动到一端,然后清理掉这端以外的对象
  4. 分代收集算法:

    新生代:占据堆的1/3空间,分为Eden区(Java新对象的出生地)、ServivorFrom、ServivorTo,比例是8:1:1。采用复制算法垃圾回收,每次回收时都有大量垃圾被回收,
            例如:方法的局部变量、相同类型的对象大小大于ServivorFrom空间大小的一半
    老年代:堆中,采用标记-清除、标记-整理算法,每次回收时只有少量对象被回收,例如:缓存对象、单例对象、session、spring里的bean。分代年龄到达15后会移入老年代
    永久代:存在于方法区中,在Java8中,永久代已经被移除,被“元数据区”所取代。元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存
            永久代也用标记-清除算法或者标记-整理算法进行垃圾回收

 分代收集算法详情 

 

算法存在的问题

参考

  1. 标记-清除算法:效率不高、会产生大量的内存碎片,导致以后程序在分配较大的对象时没有充足的内存,而提前触发一次GC动作
  2. 标记-整理算法:移动对象需要成本

对象是否可以被回收 

哪些对象可以作为GC Roots对象(见垃圾收集器上方的图)

 

 

 


 垃圾收集器

  垃圾收集器

  1. Serial收集器:串行,单线程垃圾收集⼯作的时候必须暂停其他所有的⼯作线程( "StopThe World" ),直到它收集结束
  2. ParNew收集器:多线程垃圾回收
  3. CMS收集器:用户线程和垃圾回收线程同时执行,基于标记-清除算法实现
  4. G1收集器:

    空间整合:G1整体基于标记-整理算法实现,局部采用复制算法
    可预测的停顿
    分代收集
    用户线程和垃圾回收线程同时执行 

CMS垃圾收集器

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月下未来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值