zoukankan      html  css  js  c++  java
  • GC垃圾回收机制

    GC两种类:

      轻GC、重GC(全局GC)

    GC的算法:

    • 标记清除法

      

      :不需要额外的空间。

      :两次扫描,严重浪费时间(时间成本),产生内存碎片。

    • 标记压缩

      

      是对标记清楚的再次优化。

      :防止内存碎片产生。

      :在标记清楚的基础上再次扫描,移动存活的对象,多了一个移动成本

    • 复制算法

      在GC过程中,幸存区0和幸存区1谁空谁就是to,另外一个是from。两者都不空通过复制算法,将一个幸存区置空,复制到from区,则该幸存区为to。目的是为了让幸存区from、to分明,并且是动态的。可以用过-XX: MaxTenuringThreshold=?来设置进入养老区的时间。默认情况下,一个对象经过15次GC没有被回收,就进入老年区。

      :没有内存碎片。

      :浪费内存空间,多了一半空的内存(to)。假设对象100%存活(极端情况),全部从from复制到to,成本太高(内存成本)。

      最佳使用场景:对象存活度较低的时候,新生区

    • 引用计数法

      

    ·


    总结:

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

    没有最优算法,只有最合适的算法。

    GC:分代收集算法

    新生代:

    • 存活率低
    • 复制算法

    老年代:

    • 区域大,存活率高
    • 标记清除+标记压缩混合
  • 相关阅读:
    15.5.3 【Task实现细节】状态机的结构
    JavaWeb-EL的11个内置对象
    JavaWeb-EL入门
    JavaWeb-BeanUtils
    JavaWeb-JavaBean
    JavaWeb-JSP动作标签
    JavaWeb-include和taglib指令
    JavaWeb-pageContext对象
    JavaWeb-page指令
    JavaWeb-URL重写
  • 原文地址:https://www.cnblogs.com/zqzhen/p/12669155.html
Copyright © 2011-2022 走看看