JVM彙總--類加載/收集器

類加載:算法

自定義類加載器的核心在於對字節碼文件的獲取即重寫 findClass 方法,併發

若是是加密的字節碼則須要在該類中對文件進行解密。jvm

最好不要重寫loadClass方法,由於這樣容易破壞雙親委託模式。函數

 

Class.forName()和ClassLoader.loadClass()區別佈局

  • Class.forName():將類的.class文件加載到jvm中以外,還會對類進行解釋,執行類中的static塊;加密

  • ClassLoader.loadClass():只幹一件事情,就是將.class文件加載到jvm中,不會執行static中的內容,只有在newInstance纔會去執行static塊。spa

  • Class.forName(name,initialize,loader)帶參函數也可控制是否加載static塊。而且只有調用了newInstance()方法採用調用構造函數,建立類的對象 。線程

 

內存設置控制參數code

  • -Xms設置堆的最小空間大小。對象

  • -Xmx設置堆的最大空間大小。

  • -XX:NewSize設置新生代最小空間大小。

  • -XX:MaxNewSize設置新生代最大空間大小。

  • -XX:PermSize設置永久代最小空間大小。

  • -XX:MaxPermSize設置永久代最大空間大小。

  • -Xss設置每一個線程的堆棧大小。

沒有直接設置老年代的參數,可是能夠設置堆空間大小和新生代空間大小兩個參數來間接控制。

老年代空間大小=堆空間大小-年輕代大空間大小

 

分代收集算法

GC分代的基本假設:絕大部分對象的生命週期都很是短暫,存活時間短。

「分代收集」(Generational Collection)算法,把Java堆分爲新生代和老年代,這樣就能夠根據各個年代的特色採用最適當的收集算法。在新生代中,每次垃圾收集時都發現有大批對象死去,只有少許存活,那就選用複製算法,只須要付出少許存活對象的複製成本就能夠完成收集。而老年代中由於對象存活率高、沒有額外空間對它進行分配擔保,就必須使用「標記-清理」或「標記-整理」算法來進行回收。

 

垃圾收集算法是內存回收的方法論,垃圾收集器就是內存回收的具體實現

 

CMS收集器 是一種以獲取最短回收停頓時間爲目標的收集器。

整個過程分爲4個步驟,包括:

  • 初始標記(CMS initial mark)        「Stop The World」

  • 併發標記(CMS concurrent mark)

  • 從新標記(CMS remark)             「Stop The World」

  • 併發清除(CMS concurrent sweep)

初始標記僅僅只是標記一下GC Roots能直接關聯到的對象,速度很快;

併發標記階段就是進行GC Roots Tracing的過程;

而從新標記階段則是爲了修正併發標記期間,因用戶程序繼續運做而致使標記產生變更的那一部分對象的標記記錄,這個階段的停頓時間通常會比初始標記階段稍長一些,但遠比並發標記的時間短。

因爲整個過程當中耗時最長的併發標記和併發清除過程當中,收集器線程均可以與用戶線程一塊兒工做,因此整體上來講,CMS收集器的內存回收過程是與用戶線程一塊兒併發地執行。

優勢: 併發收集、低停頓
缺點: 產生大量空間碎片、併發階段會下降吞吐量

參數控制:

-XX:+UseConcMarkSweepGC 使用CMS收集器
-XX:+ UseCMSCompactAtFullCollection Full GC後,進行一次碎片整理;整理過程是獨佔的,會引發停頓時間變長
-XX:+CMSFullGCsBeforeCompaction 設置進行幾回Full GC後,進行一次碎片整理
-XX:ParallelCMSThreads 設定CMS的線程數量(通常狀況約等於可用CPU數量)

CMS是老年代收集器 新生代收集須要使用ParNew。

 

G1收集器有如下特色:(CMS收集器相比)

  1. 空間整合,G1收集器採用標記整理算法,不會產生內存空間碎片。分配大對象時不會由於沒法找到連續空間而提早觸發下一次GC。

  2. 可預測停頓,這是G1的另外一大優點,下降停頓時間是G1和CMS的共同關注點,但G1除了追求低停頓外,還能創建可預測的停頓時間模型,能讓使用者明確指定在一個長度爲N毫秒的時間片斷內,消耗在垃圾收集上的時間不得超過N毫秒,這幾乎已是實時Java(RTSJ)的垃圾收集器的特徵了。

新生代和老年代能夠都使用G1收集器。

G1收集器時,Java堆的內存佈局與其餘收集器有很大差異,它將整個Java堆劃分爲多個大小相等的獨立區域(Region),雖然還保留有新生代和老年代的概念,但新生代和老年代再也不是物理隔閡了,它們都是一部分(能夠不連續)Region的集合。

 

https://mp.weixin.qq.com/s/sFnMxEwJiYRjwTiBIjfcZg

相關文章
相關標籤/搜索