jvmgc演算法
『壹』 JVM系列(九):MinorGC、MajorGC、FullGC垃圾回收介紹
MinorGC、MajorGC和FullGC介紹如下:
1. MinorGC: 定義:發生在年輕代空間的垃圾回收過程。 特點:由於Java對象大多生命周期短暫,因此Minor GC非常頻繁,且回收速度較快。 演算法:一般採用復制演算法。 影響:可能會引發STW,直到JVM垃圾回收結束後,用戶線程才恢復運行。
2. Major GC: 定義:發生在老年代的GC。 觸發條件:當老年代空間不足時,會先嘗試觸發Minor GC。如果Minor GC之後空間仍然不足,則會觸發Major GC。 伴隨情況:基本上進行一次Major GC就會伴隨進行一次Minor GC。 速度:一般比Minor GC慢10倍,且STW的時間更長。
3. Full GC: 定義:可以理解為Major GC和Minor GC組合後進行的一整個過程,清理JVM整個堆空間。 觸發條件:Full GC的觸發條件多樣,但都會產生應用程序的停頓現象。 影響:當停頓產生時,整個應用程序線程都會被暫停,可能導致應用程序看似卡死的情況。
以上是對MinorGC、MajorGC和FullGC垃圾回收的簡要介紹,希望對你有所幫助。
『貳』 JVM垃圾回收之Minor GC
JVM中的Minor GC是指發生在新生代內存空間的垃圾回收過程。以下是關於Minor GC的詳細解釋:
觸發條件:
- 當JVM運行過程中,新生代內存空間逐漸不足時,會觸發Minor GC。
垃圾回收過程:
- 使用可達性分析演算法來識別哪些對象可以被回收。該演算法主要查找對象是否被GC Roots引用,如果發現有引用,則該對象不可回收。
- GC Roots通常包括方法的局部變數和靜態變數引用的對象。
對象的引用類型:
- 強引用:直接由變數指向的對象,不會被回收。
- 軟引用:在內存不足時會被回收。
- 弱引用:在垃圾回收時一定會被回收。
- 虛引用:用於在對象被回收時收到通知,實際應用中很少用到。
finalize方法的影響:
- 存在GC Roots的對象不會被回收,但不意味著所有不存在GC Roots的對象一定會被回收。
- 對象可以通過重寫finalize方法來避免回收,垃圾回收器在執行回收前會調用finalize方法,判斷是否有引用存在,若存在則不進行回收,直到下一次垃圾回收再次確認該對象沒有引用才進行回收。
新生代內存模型:
- Eden區佔新生代內存的80%,Survivor區各佔10%。
- 對象在Eden區中創建後,當Eden區滿時觸發Minor GC,存活對象轉移到一個Survivor區,Eden區清空。
- 下一次GC時,Eden區和上次存活對象所在的Survivor區中存活對象轉移到另一個Survivor區,Eden區再次清空。
- 通過這樣的循環使用Survivor區,確保每次GC後都能得到較大連續的內存空間,減少內存碎片,提高內存使用效率。
意義:
- Minor GC結合高效垃圾回收演算法和新生代內存模型,顯著提升內存分配性能,有效控制內存碎片,保證內存使用效率,是JVM新生代內存管理的高效策略。
『叄』 JVM的垃圾演算法有哪幾種
一、垃圾收集器概述
如上圖所示,垃圾回收演算法一共有7個,3個屬於年輕代、三個屬於年老代,G1屬於橫跨年輕代和年老代的演算法。
JVM會從年輕代和年老代各選出一個演算法進行組合,連線表示哪些演算法可以組合使用
二、各個垃圾收集器說明
1、Serial(年輕代)
年輕代收集器,可以和Serial Old、CMS組合使用
採用復制演算法
使用單線程進行垃圾回收,回收時會導致Stop The World,用戶進程停止
client模式年輕代默認演算法
GC日誌關鍵字:DefNew(Default New Generation)
圖示(Serial+Serial Old)
7、G1
G1收集器由於沒有使用過,所以從網上找了一些教程供大家了解
並行與並發
分代收集
空間整合
可預測的停頓