安卓學(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
