沒有任何引用指向的一個對象或者多個對象(循環引用)
部分垃圾回收器使用的模型算法
新生代 = Eden + 2個suvivor區 多線程
PS 年輕代 並行回收
新生代並行回收收集器也是使用複製算法的收集器。從表面上看,它和並行收集器同樣都是多線程、獨佔式的收集器。可是,並行回收收集器有一個重要的特色:它很是關注系統的吞吐量。
在啓動參數中指定-XX:+UseParallelGC,會使用Parallel Scavenge(新生代並行回收收集器) + SerialOld的回收器組合
若是使用-XX:+UseParallelOldGC,表示Parallel Scavenge(新生代並行回收收集器)+ Parallel Old(並行回收收集器)併發
Serial回收器的多線程版本,只能用於新生代。使用複製算法,多線程並行工做。在多CPU主機上的性能高於Serial,單CPU主機上的性能低於Serial。
若是使用-XX:+UseParNewGC,表示ParNew(並行收集器)+ Serial Old(串行收集器)ide
Serial收集器的老年版本,獨佔式,單線程,使用的是標記--整理算法,這個收集器的目的也是用於Client模式下的虛擬機使用。性能
是Parallel Scavenge收集器的老年版本,使用多線程和標記整理算法,注重吞吐量優先,在注重吞吐量和CPU資源銘感的場合,均可以考慮Parallel Scavenge加Parallel Old收集器。spa
算法:三色標記 + Incremental Update
1.初始標記:Stop the world,只標記GC Roots能直接關聯到的對象。
2.併發標記:GC Roots Tracing
3.從新標記:Stop the world,修正併發標記期間,因用戶程序繼續運行致使標記產生變更的那一部分對象的標記記錄。
4.併發清除:併發清除能夠和用戶線程一塊兒運行,因此整體上停頓的時間很是短。
可是CMS收集器有三個顯著缺點:
1.對CPU資源敏感。
2.沒法處理浮動垃圾。
3.收集結束後會產生大量碎片。線程
1.G1的設計原則是"首先收集儘量多的垃圾(Garbage First)"。所以,G1並不會等內存耗盡(串行、並行)或者快耗盡(CMS)的時候開始垃圾收集,而是在內部採用了啓發式算法,在老年代找出具備高收集收益的分區進行收集。同時G1能夠根據用戶設置的暫停時間目標 自動調全年輕代和總堆大小,暫停目標越短年輕代空間越小、總空間就越大;
2.G1採用內存分區(Region)的思路,將內存劃分爲一個個相等大小的內存分區,回收時則以分區爲單位進行回收,存活的對象複製到另外一個空閒分區中。因爲都是以相等大小的分區爲單位進行操做,所以G1自然就是一種壓縮方案(局部壓縮);
3.G1雖然也是分代收集器,但整個內存分區不存在物理上的年輕代與老年代的區別,也不須要徹底獨立的survivor(to space)堆作複製準備。G1只有邏輯上的分代概念,或者說每一個分區均可能隨G1的運行在不一樣代之間先後切換;
4.G1的收集都是STW的,但年輕代和老年代的收集界限比較模糊,採用了混合(mixed)收集的方式。即每次收集既可能只收集年輕代分區(年輕代收集),也可能在收集年輕代的同時,包含部分老年代分區(混合收集),這樣即便堆內存很大時,也能夠限制收集範圍,從而 下降停頓。設計