垃圾回收算法
1.引用計數(shù)法
2.復(fù)制算法 (新生代)
復(fù)制活的到空的(復(fù) 活)
復(fù)制之后有交換,誰空誰是To (To 0 --->往占用0的位置挪)
優(yōu)點:沒有產(chǎn)生內(nèi)存碎片, 缺點:大對象復(fù)制耗時(所以用于新生代)
3.標(biāo)記清除法 (老年代)
4.標(biāo)記整理法 (老年代)
GC Roots 一定是從Roots開始的
可以作為GC Root的對象
盤點家底查看 JVM 默認值
- 查看初始默認值:-XX:+PrintFlagsInitial
ginseng@ginseng-pc:~/Project/demo$ java -XX:+PrintFlagsInitial
[Global flags]
intx ActiveProcessorCount = -1 {product}
uintx AdaptiveSizeDecrementScaleFactor = 4 {product}
uintx AdaptiveSizeMajorGCDecayTimeScale = 10 {product}
uintx AdaptiveSizePausePolicy = 0 {product}
uintx AdaptiveSizePolicyCollectionCostMargin = 50 {product}
uintx AdaptiveSizePolicyInitializingSteps = 20 {product}
uintx AdaptiveSizePolicyOutputInterval = 0 {product}
uintx AdaptiveSizePolicyWeight = 10 {product}
...
- 查看修改更新:-XX:+PrintFlagsFinal
bool UsePSAdaptiveSurvivorSizePolicy = true {product}
bool UseParNewGC = false {product}
bool UseParallelGC := true {product}
bool UseParallelOldGC = true {product}
bool UsePerfData = true {product}
bool UsePopCountInstruction = true {product}
bool UseRDPCForConstantTableBase = false {C2 product}
= 與 := 的區(qū)別是,一個是默認同诫,一個是人物改變或者 jvm 加載時改變的參數(shù)
工作中常用的 JVM 配置參數(shù)
永久代用的是JVM的堆內(nèi)存
通過-XX:+PrintGCDetails查看GC收集日志
該參數(shù)范圍只能設(shè)置0~15(java8)
引用
強引用
軟引用
弱引用
軟/弱引用使用場景
虛引用
GC Roots和四大引用總結(jié)
OOM(常見)
GC Overhead
Direct buffer memory
通常因為NIO導(dǎo)致
unable to create new native thread
Metaspace
GC 收集器
其中,G1收集器是將堆內(nèi)存分割成不同的區(qū)域然后并發(fā)的對其進行垃圾回收.
java8
新生代收集器
老年代收集器
CMS4步過程
1.初始標(biāo)記
2.并發(fā)標(biāo)記
3.重新標(biāo)記
4.并發(fā)清除
四步總結(jié)
CMS優(yōu)缺點:
優(yōu):并發(fā)收集低停頓
缺:1.采用標(biāo)記清除算法會導(dǎo)致大量內(nèi)存碎片
2.并發(fā)執(zhí)行對CPU壓力大
缺點主要原因
如何選擇垃圾收集器
G1收集器
特點
G1底層原理
回收步驟
四步