GC Garbage Collector

安卓學(xué)習(xí)筆記之GC

什么是垃圾

  • 沒有任何引用指向的一個對象或多個對象(循環(huán)引用)

如何定位垃圾

  • reference count 引用計數(shù)
  • root searching 根搜索算法
    1、GC roots:線程池變量、靜態(tài)變量、常量池、JNI指針

常見的垃圾回收算法

  • Mark-Sweep(標記清除)--位置不連續(xù)、產(chǎn)生碎片
  • Copying (拷貝)--沒有碎片、浪費空間、浪費內(nèi)存
  • Mark-Compact (標記壓縮) --沒有碎片、效率偏低

JVM內(nèi)存的分代模型(用于分代垃圾回收算法)

  • 部分垃圾回收器使用的模型
  • 新生代+老年代+永久代(1.7)/元數(shù)據(jù)區(qū)(1.8)Metaspace
    1、永久代 元數(shù)據(jù)——Class
    2、永久代必須指定大小限制,元數(shù)據(jù)區(qū)可以設(shè)置也可以不設(shè)置、無上限(受限于物理內(nèi)存)
    3、字符串常量 1.7存在永久代,1.8存在堆里
    4、MethodArea邏輯概念—永久代、元數(shù)據(jù)
  • 堆內(nèi)存(Heap)邏輯分區(qū)
    1、new(新生代)與old(老年代) 按1:3的比例分區(qū)
    2、new(新生代)=eden+2個survivior 按8:1:1比例分區(qū)
    2.1、YGC回收之后、大多數(shù)對象會被回收、活著的進入S0
    2.2、再次YGC、活著的對象eden+S0->S1
    2.3、再次YGC、活著的對象edem+S1->S0
    2.4、年齡足夠的進入old
    2.5、S區(qū)裝不下的直接進入老年代
  • old區(qū)
    1、頑固分子
    2、老年代滿了> FGC Full GC
  • GC Tuning(Generaion)
    1、盡量減少FGC
    2、MinorGC=YGC
    3、MajorGC=FGC

常見的垃圾回收器

  • Serial 年輕代 串行回收
  • PS 年輕代 并行回收
  • ParNew 年輕代 配合CMS的并行回收
  • SerialOld 單線程的回收算法
  • parallelOld 多線程的回收算法
  • ConcurrentMarkSweep(CMS ) 老年代 并發(fā)的,垃圾回收和應(yīng)用程序同時運行,減低STW的時間(200ms)
  • G1 (10ms)
  • ZGC (1ms)都可以PKC++了
  • Shenandoah
  • eplison
  • 1.8默認的垃圾回收器 :PS+parallelOld


    垃圾回收器 Garbage Collectors
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容