寫在前面算法
這年頭就是得不斷地學習. 學什麼東西就看須要了. 不學習很難進步. 同時別人也會超過你. 東西都是網上有的。圖片也好,文字也好。基本均可以在網上找到。服務器
JAVA運行原理併發
JVM包括字節碼解釋程序,執行器,方法區,堆,VM棧,本地方法棧,Program Counter計數器。elasticsearch
垃圾回收算法oop
GC主要分二類,新生代GC,老年代GC;學習
新生代GC包括:串行GC、並行GC、並行回收GCspa
老年代GC包括:串行GC、並行GC、CMS操作系統
G1比較特殊,同時支持新生代和老年代3d
GC在選擇上,主要關注兩點,吞吐量優先和暫停時間優先,server
對於吞吐量優先的採用server默認的並行GC(Parallel GC)方式(上圖藍色區域),
對於暫停時間優先的選用併發GC(CMS)方式(上圖黃色區域),經常使用場景:互聯網、電商類
暫停時間優先: 並行GC + CMS
開啓方式[ -XX:+UseConcMarkSweepGC -XX:+UseParNewGC ]
吞吐量優先: 並行回收GC + 並行GC
開啓方式 [ -XX:+UseParallelOldGC ] ,此GC也時server模式默認的配置
G1: [ -XX:+UseG1GC ]
適用於服務器端、大內存、多CPU情景的垃圾收集器;
G1的目標是在維持高效率回收的同時,提供軟實時中斷特性
經常使用場景:hadoop、elasticsearch
Cms 堆 -> 年輕代老年代
G1 堆 -> 多個區 -> 每一個區裏(年輕代老年代)
Cms 標記清理算法
G1 壓縮複製算法,不產生碎片
G1 時間停頓可設置,相關參數[ -XX:MaxGCPauseMillis=100 -XX:GCPauseIntervalMillis=200 ]
須要注意的是,JDK8中已經用Metaspace(元數據區)徹底替代了永久代(即方法區)
並且元數據區內存不在JVM中,而是使用的本地內存,默認狀況下受操做系統內存限制。
調整元數據區內存大小的參數 -XX:MetaspaceSize -XX:MaxMetaspaceSize