volatile
保證變量在多個(gè)線(xiàn)程之間可見(jiàn).
保證可見(jiàn)性的方法:
volatile
synchronized 重量級(jí)的鎖鞋真,
final.
指令重排:a=1; b=2;
有序性
線(xiàn)程內(nèi)串行語(yǔ)義:
寫(xiě)后讀 a=1均函,b=a螟凭;寫(xiě)一個(gè)變量后 在讀取這個(gè)變量
寫(xiě)后寫(xiě) a=1虚青,a=2;
讀后寫(xiě) a=b螺男,b=1棒厘;
怎么保證有序性.
Trace跟蹤參數(shù):
-verbose:gc 打印GC日志的
-XX:+PrintGCDetails 打印日志的詳細(xì)信息
-Xloggc:d:/gc.log 打印日志的路徑
-XX:+PrintHeapAtGC 發(fā)生GC的時(shí)候,是否要重新打印堆的信息
-XX:+TraceClassLoading 類(lèi)加載的軌跡下隧。 先加載rt.jar,最后加載自己應(yīng)用的ClassLoader
Heap內(nèi)存分配參數(shù):
-Xmx 堆的最大值奢人。 -Xmx20m
-Xms 堆可分配的最小值。 -Xms5m
Heap Memory 是如何分配的汪拥?
案例
-Xmn 新生代的大小 eden+2s达传。
-XX:NewRatio 新生代(eden+2s)/老年代篙耗。1/4
-XX:SurvivorRatio 幸存區(qū)的比例迫筑。2s/eden。
案例及GC變化
只要沒(méi)有一塊連續(xù)的空間存儲(chǔ)1MB宗弯,則會(huì)發(fā)生GC脯燃。
GC 表示發(fā)生GC的類(lèi)型 GC|FULLGC。
FULLGC: stop the world蒙保,把所有的用戶(hù)線(xiàn)程停止辕棚。
PSYoungGen:年輕代收集器。
11279K->1528K(13824K)
gc前該內(nèi)存區(qū)域(年輕代)已經(jīng)使用的內(nèi)存->gc后該內(nèi)存區(qū)域已使用的容量(該內(nèi)存區(qū)域總內(nèi)存)邓厕。
JVM內(nèi)存回收:
1.標(biāo)記-清除算法
(1)標(biāo)記階段逝嚎,從根節(jié)點(diǎn)不可達(dá)的對(duì)象做標(biāo)記。
(2)清除階段详恼。清除
(3)優(yōu)點(diǎn):清除特別快
(3)缺點(diǎn):導(dǎo)致內(nèi)存不連續(xù)补君,會(huì)產(chǎn)生碎片。
2.復(fù)制算法
為了優(yōu)化標(biāo)記清除算法產(chǎn)生的碎片昧互。
原理:
優(yōu)缺點(diǎn):不會(huì)產(chǎn)生內(nèi)存碎片
GC挽铁,F(xiàn)ULL GC 就是使用的復(fù)制算法
3.標(biāo)記整理算法
讓存活的對(duì)象向一端移動(dòng)。直接清理到這個(gè)邊界之后的所有對(duì)象敞掘。不會(huì)產(chǎn)生碎片叽掘。
缺點(diǎn):
分代收集算法
分代思想
新生代(空間大)可以用復(fù)制算法;老年代(不容易死的對(duì)象)玖雁,因?yàn)榭臻g小更扁,所以用標(biāo)記清除算法或標(biāo)記整理算法。
JVM垃圾收集器:
..........年輕代.............................
Serial:串行收集器.stop the world,會(huì)導(dǎo)致服務(wù)(例如線(xiàn)程)停頓浓镜。使用的是 新生代是(復(fù)制算法)老年代是(標(biāo)記整理算法)赊堪。
串行收集器:一個(gè)是用戶(hù)線(xiàn)程,一個(gè)是GC線(xiàn)程竖哩,一旦GC垃圾回收哭廉,用戶(hù)線(xiàn)程必須暫停。
ParNew:并行收集器.多個(gè)GC線(xiàn)程可以并行執(zhí)行相叁。也會(huì)發(fā)生stop the world遵绰。
新生代使用并行收集器,老年代使用串行收集器增淹。
Parallel:
Parallel Scavenge:(基本滿(mǎn)足需求)并行收集器:專(zhuān)門(mén)對(duì)于新生代的收集器椿访。多線(xiàn)程的,使用復(fù)制算法虑润,更加關(guān)注吞吐量成玫,減少stop the world的時(shí)間,減少GC的時(shí)間拳喻。
...........老年代...........................
Serial Old:老年代的串行收集器哭当,
Parallel Old:老年代的并行處理器,
CMS:真正意義上的并發(fā)收集器
并發(fā):用戶(hù)線(xiàn)程和GC線(xiàn)程可以同時(shí)執(zhí)行,如果發(fā)生GC冗澈,用戶(hù)線(xiàn)程依然可以執(zhí)行钦勘。
并行:用戶(hù)線(xiàn)程和GC線(xiàn)程可以同時(shí)執(zhí)行,如果發(fā)生GC亚亲,用戶(hù)線(xiàn)程會(huì)暫停彻采。
G1:可以設(shè)置GC的時(shí)間.
分代收集是如何組合的?
新生代:Serial, ParNew, Parallel Scavenge
老年代:Serial Old, Parallel Old, CMS