java垃圾
A. java 鐨勫瀮鍦懼洖鏀舵満鍒跺備綍瑙﹀彂 MinorGC 鎿嶄綔錛
Java鐨勫瀮鍦懼洖鏀舵満鍒舵槸鍩轟簬鍒嗕唬鏀墮泦鐞嗚虹殑銆傚湪Java涓錛屽爢鍐呭瓨琚鍒掑垎涓哄勾杞諱唬錛圷oung Generation錛夊拰鑰佸勾浠o紙Old Generation錛夈傚勾杞諱唬鍙堣緇嗗垎涓篍den鍖恆丼urvivor 0鍖哄拰Survivor 1鍖恆
MinorGC錛堝勾杞諱唬鍨冨溇鍥炴敹錛夋搷浣滀細鍦ㄤ互涓嬫儏鍐典笅瑙﹀彂錛
1. 褰撳勾杞諱唬絀洪棿涓嶈凍鏃訛細褰撳勾杞諱唬絀洪棿涓嶈凍浠ュ圭撼鏂扮殑瀵硅薄鍒嗛厤璇鋒眰鏃訛紝浼氳Е鍙慚inorGC銆傛ゆ椂錛孞VM浼氬皾璇曞洖鏀跺勾杞諱唬涓鐨勬棤鐢ㄥ硅薄錛屼互閲婃斁絀洪棿銆
2. 褰撳勾杞諱唬涓鐨勫硅薄緇忓巻浜嗕竴瀹氭℃暟鐨凪inorGC鍚庝粛鐒跺瓨媧伙細濡傛灉涓涓瀵硅薄鍦ㄥ勾杞諱唬涓緇忓巻浜嗕竴瀹氭℃暟錛堥粯璁ゆ槸15嬈★級鐨凪inorGC浠嶇劧瀛樻椿錛岄偅涔堝畠灝嗚鏅嬪崌鍒拌佸勾浠c傝繖縐嶆儏鍐典笅錛孧inorGC灝嗕笉鍐嶅硅繖涓瀵硅薄榪涜屽洖鏀躲
3. 緋葷粺絀洪棽鏃墮棿錛氶櫎浜嗕笂榪頒袱縐嶆儏鍐靛栵紝MinorGC榪樺彲鑳藉湪緋葷粺絀洪棽鏃惰Е鍙戙傝繖鏈夊姪浜庣『淇滼VM濮嬬粓淇濇寔杈冧綆鐨勫唴瀛樺崰鐢錛屼粠鑰屾彁楂樻ц兘銆
闇瑕佹敞鎰忕殑鏄錛孧inorGC騫朵笉鎬繪槸絝嬪嵆鍙戠敓銆傚畠鍙鑳戒細鍦ㄥ簲鐢ㄧ▼搴忚繍琛岃繃紼嬩腑鐨勪換浣曟椂鍒昏Е鍙戙傛ゅ栵紝JVM浼氭牴鎹搴旂敤紼嬪簭鐨勯渶奼傚拰緋葷粺璧勬簮鏉ヨ皟鏁村勾杞諱唬鐨勫ぇ灝忓拰MinorGC鐨勯戠巼銆
B. java中的垃圾回收機制是怎樣的
java 的垃圾回收機制:
1.垃圾回收是由虛擬機自動執行,不能人為地干預。
2.系統比較空閑(垃圾回收線程)
3.對象不在被引用.對象處於引用的隔離島狀態(隔離引用),對象具備了回收的條件
4.gc()方法,可以建議虛擬機執行垃圾回收,但是不能確定是否會執行回收。
C. Java垃圾回收GC 演算法實現:G1演算法詳解
G1 – Garbage First(垃圾優先演算法)
主要目標為將停頓時間與分布預期化與可配置化,作為一款軟實時垃圾收集器,可設置停頓時間指標,如任意1秒內停頓不得超過5毫秒。通過將堆劃分為多個小堆區,實現增量式收集,每次只處理部分小堆區。並發階段估算存活對象數,以垃圾最多的小堆區優先收集。為了啟用G1收集器,使用命令行參數。
在初始的fully-young模式下,未執行過並發階段,僅年輕代堆區中的存活對象被復制到存活區。復制過程稱為轉移,與年輕代收集器類似。並發標記通過快照方式標記存活對象,用於回收集選擇。階段包括初始標記、根區域掃描、並發標記、再次標記與清理,其中初始標記與清理階段會暫停應用線程。並發標記與其他階段可並發執行,減少停頓時間。
G1收集器通過多個專用worker線程執行最繁重的GC任務。在轉移暫停期間,執行一些瑣碎活動。日誌描述了worker線程的行為。
並發標記階段,通過對象存活信息構建小堆區的存活狀態,選擇回收集。階段分為初始標記、根區域掃描、並發標記、再次標記與清理。初始標記階段標記直接可達對象,根區域掃描標記可達存活對象,並發標記遍歷對象圖並標記可達對象,再次標記階段短暫停頓完成標記過程,清理階段進行額外清理工作。並發標記可減少停頓時間。
G1收集器的轉移暫停分為純年輕代模式與混合模式。純年輕代模式中,年輕代與部分老年代小堆區被清理。混合模式在並發標記後,清理年輕代與一部分老年代區域,基於規則與歷史數據決定啟動時機與具體數字與順序。在混合模式下,G1使用Remembered Sets支持小堆區獨立回收,記錄外部指向本區的引用,以確定存活性。
Remembered Sets記錄了從外部指向小堆區的引用,作為附加GC根。在並發標記過程中,老年代中的垃圾對象被忽略,即使有外部引用指向他們。G1收集器的轉移暫停包括純年輕代模式與混合模式,混合模式下通過Remembered Sets支持小堆區獨立回收。日誌描述了不同模式下的行為與具體操作。
總結,G1垃圾收集器為HotSpot中的先進產品級垃圾收集器,適用於大內存、低延遲場景。通過多個階段與混合模式,實現高效回收與預期停頓時間。G1收集器通過初始標記、根區域掃描、並發標記、再次標記與清理階段,實現垃圾收集與低停頓時間。Remembered Sets用於支持小堆區獨立回收,減少並發標記與轉移暫停時間。選擇G1收集器時,需考慮系統特性與性能需求。通過實踐與調整,可實現最佳性能與效率。