当前位置: 首页 > news >正文

GC垃圾回收

垃圾回收的区域

JVM在进行GC时,并不是对这三个区域统一回收,大部分的时候,回收都是新生代

  • 新生区

  • 幸存区

  • 老年区

GC种类:

  • 轻GC(普通的GC)

  • 重GC(全局的GC)

GC题目:

  • JVM的内存模型和分区,详细到每个区放什么?

  • 堆里面的分区有哪些?Eden,from,to,老年区,说说他们的特点

  • GC的算法有哪些?怎么用?

    • 标记清除法

    • 标记压缩

    • 复制算法

    • 引用计数器

  • 轻GC和重GC分别是在什么什么时候发生?

复制算法

        为了解决标记清除算法的内存碎⽚问题,就产⽣了复制算法。复制算法将内存分为⼤⼩ 相等的两半,每次只使⽤其中⼀半。垃圾回收时,将当前这⼀块的存活对象全部拷⻉到另⼀半,然 后当前这⼀半内存就可以直接清除。这种算法没有内存碎⽚,但是他的问题就在于浪费空间。⽽ 且,他的效率跟存活对象的个数有关。

  • 好处:没有内存的碎片
  • 坏处:浪费了内存空间(多了一半空间to永远是空)。假设对象100%存活(极端情况),不适合使用复制算法

使用场景

        复制算法最佳使用场景:对象存活度较低的时候(新生区)

标记清除算法

        a. 标记阶段:把垃圾内存标记出来

        b. 清除阶段:直接将垃圾内存回收。

         c. 这种算法是⽐较简单的,但是有个很严重的问题,就是会产⽣⼤量的内存碎⽚。

  • 优点:不需要额外的空间
  • 缺点:两次扫描,严重浪费时间,会产生内存碎片

标记压缩算法

        为了解决复制算法的缺陷,就提出了标记压缩算法。这种算法在标记阶段跟标记清除算法是⼀样的,但是在完成标记之后,不是直接清理垃圾内存,⽽是将存活对象往⼀端移动,然 后将边界以外的所有内存直接清除

        可以进行多次标记清除,再进行一次压缩

GC算法总结

        内存效率:复制算法>标记清除算法>标记压缩算法(时间复杂度)
        内存整齐度:复制算法=标记压缩算法>标记清除算法
        内存利用率:标记压缩算法=标记清除算法>复制算法

  思考一个问题:难道没有最优算法吗?
        答案:没有,没有最好的算法,只有最合适的算法——》GC:分代收集算法

年轻代:

  • 存活率低
  • 复制算法

老年代:

  • 区域大:存活率高
  • 标记清除(内存碎片不是太多)+标记压缩混合实现

相关文章:

  • 建设银行网站可以查询存折吗/制作网站的app
  • 方城网站设计/爱链工具
  • 德州市建设街小学网站首页/爱站网seo培训
  • 个人网站建设的花费/2024疫情最新消息今天
  • WordPress目录存放大小/适合seo软件
  • 郑州做网站的公司msgg/手机百度浏览器
  • 七大基本比较排序算法(下)之【快速排序】
  • 网课搜题使用接口系统
  • 简单通讯录管理系统(Java)
  • Paxos 算法
  • Spring中自动注入的两种方式
  • 面试基础篇——ArrayList扩容机制
  • Android——8种通知栏-适配 Adnroid12
  • 微服务项目常用术语
  • BASE理论
  • 【Go实现】实践GoF的23种设计模式:代理模式
  • Java多线程案例----单例模式[饿汉模式,懒汉模式]
  • 【图解CAN总线】-7-Classic CAN 2.0总线网络“负载率”计算(方法二)