国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

淺談jvm中的垃圾回收策略

2019-11-26 13:58:14
字體:
來源:轉載
供稿:網友

java和C#中的內存的分配和釋放都是由虛擬機自動管理的,此前我已經介紹了CLR中GC的對象回收方式,是基于代的內存回收策略,其實在java中,JVM的對象回收策略也是基于分代的思想。這樣做的目的就是為了提高垃圾

回收的性能,避免對堆中的所有對象進行檢查時所帶來的程序的響應的延遲,因為jvm執行GC時,會stop the word,即終止其它線程的運行,等回收完畢,才恢復其它線程的操作?;诜执乃枷胧牵簀vm在每一次執行垃圾收集器時,只是對一小部分內存

對象引用進行檢查,這一小部分對象的生命周期也更短,從而加快了垃圾收集的性能。下面我們將來介紹java中的基于代的內存回收算法的基本策略:

一、jvm堆內存的分代劃分

在基于分代的內存回收策略中,堆空間通常都被劃分為3個代,年輕代,年老代(或者tenured代),永久代。在年輕代中又被劃分了三個小的區域,分別為:Eden(伊甸)區,S0區(survivor 0),S1區(survivor 1),如下圖所示:

其中,新的對象總被分配到年經代中,當年輕代空間被填滿時,這時需要執行一次垃圾回收,即執行 minor GC,回收不再被引用的對象,并同時提升幸存的對象其年齡,年經代中的幸存對象都有年齡標識字段,一旦其達到一定的閾值,則仍然幸存的對象將被提升到老年代空間中。

老年代的空間用于存放長時間幸存的對象,即生命周期較長的對象,一旦年輕代空間的幸存對象達到一定的年齡閾值后,將被自動提升到年老代,當年老代空間被對象填滿時,這時執行一次Major GC。相較于minor GC, Major GC的執行次數要比minor GC要少很多,同時,Major Gc 執行的時間較Minor Gc要長。因為其涉及到更多的對象掃描。這種分代的思想,也是基于在實踐中,對于新分配的對象具有更短的生命周期,年老的對象具有更長的生命周期所作出的較佳的選擇。

與此同時,Minor Gc 和 Major Gc 在執行垃圾收集時,采取的是stop the world event ,即終止正在運行的線程,等GC執行完畢在恢復所有的線程。

對于永久代的內存,主要是用來存放元數據的相關信息,類及其方法的信息。當一個類不再使用時將會被回收,當執行Full GC時,將會掃描永久代內存,對其進行垃圾回收。

二、基于分代的垃圾回收的處理過程


首先,初始時,新對象被分配到Eden區域,s0,s1為空。當Eden中的空間被填滿時,執行一次Minor GC。垃圾收集器會將被引用的對象移動s0區,不再被引用的對象將被刪除,與此同時,對于幸存的對象標識其年齡為1. GC后,Eden和S1區為空如下圖所示。

下一次執行Minor GC后,與先前的執行步驟相同,唯一的區別時,這次的被引用的對象,即幸存下來的對象將會被移動到S1區,與此同時在s0區幸存的對象的年齡會增加1,變成2,如下圖所示。

當再次,執行Minor GC后,與先前的步驟相同,幸存對象會被移到S0區,給幸存對象年齡加1.如下圖所示

最后執行Minor GC 時,發現 S1中的幸存的對象年齡達到8(假設閾值 設為8),此時該對象將被提升到老年代內存中,如下圖所示。

Z

當老年代堆空間被對象填滿時,將會執行一次Major Gc,將會清除老年代不再被引用的對象,與此同時,對該空間執行壓縮。如下圖所示。

以上這篇淺談jvm中的垃圾回收策略就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 荥经县| 丰城市| 四会市| 隆昌县| 新密市| 嵩明县| 囊谦县| 简阳市| 嫩江县| 龙门县| 司法| 永安市| 开江县| 昭苏县| 龙岩市| 西平县| 潼关县| 安西县| 绥江县| 象州县| 江油市| 和静县| 北流市| 镇康县| 伊宁市| 信宜市| 岢岚县| 上思县| 环江| 建瓯市| 囊谦县| 合阳县| 大姚县| 保定市| 铜山县| 长海县| 大姚县| 桓仁| 全南县| 庄浪县| 房产|