無論什麼算法都跟引用有關,Java裏面有下面四種引用由強到弱:java
內存回收的具體實現,用一些線程模型結合上面算法實現了多種垃圾回收器,以下圖:算法
存在連線能夠搭配使用,目前沒有萬能的回收器,只能組合使用服務器
初始標記(要停用戶線程):標記一下GC Roots能直接關聯到的對象
併發標記:進行GC Roots Tracing的過程
從新標記(停用戶線程),修正併發標記期間用戶線程繼續運做而致使標記產生變更的那一部分對象的標記記錄
併發清除:基於標記清除算法作的,因此這階段就是清除,
耗時最長的是能夠與用戶線程一塊兒運行的併發標記和併發清除階段。多線程
這裏的並行、併發的概念:
並行(parallel):多個線程同時工做,可是用戶線程任然處於等待狀態
併發(Concurrent):用戶線程與垃圾收集器線程同時執行。併發
[GC、[Full GC表示停頓類型,[DefNew、[Tenured、[Perm是發生區域,這裏的區域名稱與使用的垃圾收集器密切相關,方括號裏面的3324K->152K(3712K)表示GC以前該內存已使用容量->GC以後該內存使用容量(該內存區域總容量),方括號外面的3324K-152K(11904K)表示GC以前Java堆已使用容量->GC以後Java堆使用容量(Java堆總容量),最後0.0025925secs表示該內存區域GC使用時間。優化
-XX:+<option> 啓用選項
-XX:-<option> 不啓用選項
-XX:<option>=<number>
-XX:<option>=<string>spa
-XX:+UseSerialGC | Jvm運行在Client模式下的默認值,打開此開關後,使用Serial + Serial Old的收集器組合進行內存回收 |
-XX:+UseParNewGC | 打開此開關後,使用ParNew + Serial Old的收集器進行垃圾回收 |
-XX:+UseConcMarkSweepGC | 使用ParNew + CMS + Serial Old的收集器組合進行內存回收,Serial Old做爲CMS出現「Concurrent Mode Failure」失敗後的後備收集器使用。 |
-XX:+UseParallelGC | Jvm運行在Server模式下的默認值,打開此開關後,使用Parallel Scavenge + Serial Old的收集器組合進行回收 |
-XX:+UseParallelOldGC | 使用Parallel Scavenge + Parallel Old的收集器組合進行回收 |
-XX:SurvivorRatio | 新生代中Eden區域與Survivor區域的容量比值,默認爲8,表明Eden:Subrvivor = 8:1 |
-XX:PretenureSizeThreshold | 直接晉升到老年代對象的大小,設置這個參數後,大於這個參數的對象將直接在老年代分配 |
-XX:MaxTenuringThreshold | 晉升到老年代的對象年齡,每次Minor GC以後,年齡就加1,當超過這個參數的值時進入老年代 |
-XX:UseAdaptiveSizePolicy | 動態調整java堆中各個區域的大小以及進入老年代的年齡 |
-XX:+HandlePromotionFailure | 是否容許新生代收集擔保,進行一次minor gc後, 另外一塊Survivor空間不足時,將直接會在老年代中保留 |
-XX:ParallelGCThreads | 設置並行GC進行內存回收的線程數 |
-XX:GCTimeRatio | GC時間佔總時間的比列,默認值爲99,即容許1%的GC時間,僅在使用Parallel Scavenge 收集器時有效 |
-XX:MaxGCPauseMillis | 設置GC的最大停頓時間,在Parallel Scavenge 收集器下有效 |
-XX:CMSInitiatingOccupancyFraction | 設置CMS收集器在老年代空間被使用多少後出發垃圾收集,默認值爲68%,僅在CMS收集器時有效,-XX:CMSInitiatingOccupancyFraction=70 |
-XX:+UseCMSCompactAtFullCollection | 因爲CMS收集器會產生碎片,此參數設置在垃圾收集器後是否須要一次內存碎片整理過程,僅在CMS收集器時有效 |
-XX:+CMSFullGCBeforeCompaction | 設置CMS收集器在進行若干次垃圾收集後再進行一次內存碎片整理過程,一般與UseCMSCompactAtFullCollection參數一塊兒使用 |
-XX:+UseFastAccessorMethods | 原始類型優化 |
-XX:+DisableExplicitGC | 是否關閉手動System.gc |
-XX:+CMSParallelRemarkEnabled | 下降標記停頓 |
-XX:LargePageSizeInBytes | 內存頁的大小不可設置過大,會影響Perm的大小,-XX:LargePageSizeInBytes=128m |
-XX:+PrintFlagsFinal | 可查看jdk參數的默認值 |