日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JVM中的垃圾收集算法和Heap分区简记

發布時間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM中的垃圾收集算法和Heap分区简记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如何判斷垃圾對象?

垃圾收集的第一步就是先需要算法來標記哪些是垃圾,然后再對垃圾進行處理。

?

引用計數(ReferenceCounting)算法

這種方法比較簡單直觀,FlashPlayer/Python使用該算法,簡單高效。核心思路是,給每個對象添加一個被引用計數器,被引用時+1,引用失效-1,等于0時就表示該對象沒有被引用,可以被回收。但是,Java/C#并不采用該算法,因為該算法沒有解決對象相互引用的問題,即:當兩個對象相互引用且不被其它對象引用時,各自的引用計數為1,雖不為0,但仍然是可被回收的垃圾對象。

?

根搜索(GC Roots Tracing)算法

基本原理是:GCRoot對象作為起始點(根)。如果從根到某個對象是可達的,則該對象稱為“可達對象”(存活對象,不可回收對象)。否則就是不可達對象,可以被回收。

?

垃圾收集算法

垃圾收集器通常會假設大部分的對象的存活時間都非常短,只有少數對象的存活時間比較長。

垃圾收集算法在JVM中主要是復制算法(新生代GC)和標記/整理算法(老年代GC)。

?

標記-清除(Mark-Sweep)算法

算法過程:

1. 先判定對象是否可回收,對其標記。
2. 統一回收(簡單地刪除對垃圾對象的內存引用)。

優點:簡單直觀容易實現和理解。缺點:效率不高,內存空間碎片化。

?

復制(Copying)算法

將內存平均分成A、B兩塊,算法過程:

1. 新生對象被分配到A塊中未使用的內存當中。當A塊的內存用完了,?把A塊的存活對象對象復制到B塊。

2. 清理A塊所有對象。

3. 新生對象被分配的B塊中未使用的內存當中。當B塊的內存用完了,?把B塊的存活對象對象復制到A塊。

4. 清理B塊所有對象。

5. goto 1。

優點:簡單高效。缺點:內存代價高,有效內存為占用內存的一半。

?

對復制算法進一步優化:使用Eden/S0/S1三個分區

平均分成A/B塊太浪費內存,采用Eden/S0/S1三個區更合理,空間比例為Eden:S0:S1==8:1:1,有效內存(即可分配新生對象的內存)是總內存的9/10。

算法過程:

1. Eden+S0可分配新生對象;

2. 對Eden+S0進行垃圾收集,存活對象復制到S1。清理Eden+S0。一次新生代GC結束。

3. Eden+S1可分配新生對象;

4. 對Eden+S1進行垃圾收集,存活對象復制到S0。清理Eden+S1。二次新生代GC結束。

5. goto 1。

?

標記-緊湊(Mark-Compact)

算法過程:

1. 標記:標記可回收對象(垃圾對象)和存活對象。

2. 緊湊(也稱“整理”):將所有存活對象向內存開始部位移動,稱為內存緊湊(相當于碎片整理)。完畢后,清理剩余內存空間。

?

分代收集策略

由于不同的對象適合使用不同的垃圾收集算法,所以引入“代”這個概念。不同的代有不同的分區,一般分為新生代區和老年代區。

新生代:適合采用復制算法進行垃圾收集,對象分布在Eden/S0/S1三個區。

老年代:適合采用標記-緊湊算法進行垃圾收集。

?

Heap分區和分代概念

Heap分區的目的

1. 為了分代:不同代的對象放到不同的內存分區中,實現“代提升”,也方便實現對不同分代采用不同的垃圾收集算法。

2. 垃圾收集算法需要:新生代GC使用到復制算法,該算法需要將對應的分區劃分成三個分區:Eden/S0/S1。

?

術語

Generation代

?- YongGeneration/NewGeneration:新生代,在Eden/S0/S1的存活的對象。

?- OldGeneration:老年代,在Tenured區存活的對象。
?- PermanentGeneration:永久代。
Space 區

?- Eden:伊甸園區,是新生代的一個區。
?- Survivor:幸存區,屬于新生代,為了復制算法的需要。一般分成大小相等的兩個區(S0/S1或者From/To)。

?-?Tenured:存放老年代的區域。
?- Permanent:終身區。

?

下圖:Hotspot 的 Heap 分區

?

?

下圖:VisualVM 中通過 VisualGC插件顯示的分區

?

?

Eden/S0/S1 新生代

[Eden ? ? ? ? ? ? ? ? ][S0 ? ? ][S1 ? ?]

S0/S1是大小相當的兩個區域,共同組成Survivor區。

空間比例:Eden:S0==8:1。設定方法:-XX:SurvivorRatio=8。

新生對象在Eden/S0或者Eden/S1中分配,Eden區的對象量達到一個閾值后,發生一次新生代GC。

?

Old 老年代

每個對象有“對象年齡計數器”。對象由Eden收集到Survivor區后,年齡+1。進行新生代GC后,年齡+1。依次,當年齡>=15后進入老年代。

最大年齡閾值設定:-XX:MaxTenuringThreshold。

動態年齡:如果在Survivor中所有相同年齡對象占用了空間的一半多,大于等于上述年齡的對象直接進入老年代。

大對象(比如大的數組)直接進入老年代。閾值設定:-XX:PretenureSizeThreshold。

?

Perm 永久代(PermanentGeneration)

用于存放不變對象,如類、方法、字符串等。

Java7把駐留字符串(intentd string)放到了老年代區。Java8中移除了Hotspot的永久代區。


轉載于:https://blog.51cto.com/shu1983/1904481

總結

以上是生活随笔為你收集整理的JVM中的垃圾收集算法和Heap分区简记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美经典一区二区 | 无套爆插 | 精品久久久久久久久久久 | 九一在线观看免费高清视频 | 欧美黑人一区二区三区 | 伊人草草 | 亚洲区精品 | 少妇av一区 | 毛片无遮挡 | 成人爱爱免费视频 | 精品在线视频观看 | 少妇裸体性生交 | 日本高清视频一区 | 老司机精品福利视频 | 亚洲三级小说 | www.av在线免费观看 | 久久久久久一区二区三区 | 特级黄色录像 | 日本美女动态图 | 四虎影院一区 | 夫妻自拍偷拍 | 冲田杏梨一区二区三区 | 91网站在线免费观看 | 一区日韩 | 91蜜臀精品国产自偷在线 | 日韩午夜视频在线观看 | 国产精品天美传媒沈樵 | 亚洲精品推荐 | 欧美福利在线 | 午夜亚洲aⅴ无码高潮片苍井空 | 久久激情五月 | 久久久久久久久久艹 | 日韩国产一区 | 久久久久亚洲av成人人电影 | 亚洲欧美日韩一区二区三区在线观看 | 日韩无码精品一区二区三区 | 淫久久 | 又黄又爽又色的视频 | 国产免费观看一区 | 亚洲乱码国产乱码精品精软件 | 亚洲天堂导航 | 在线观看1区 | 国产天堂av在线 | 刘亦菲一区二区三区免费看 | 国产黄色一级片视频 | 黄色精品网站 | 男女超爽视频免费播放 | 男人av在线 | 国产精品蜜臀av | 色呦呦在线免费观看 | 国产亚洲一区二区三区不卡 | 中文字幕有码在线播放 | 日本激情影院 | 探花视频在线观看 | www.色午夜 | 五月婷婷俺也去 | 久久久久久久久久一区二区三区 | 91视频h| 青草国产视频 | 天天做天天躁天天躁 | 91精品中文字幕 | 国产v综合v亚洲欧美久久 | 久久久久逼 | 亚洲看看 | 91手机在线观看 | 国产日韩在线一区 | 国产亚洲一区二区在线 | 欧美性猛交乱大交xxxx | 欧美精产国品一二三 | 国产又爽又猛又粗的视频a片 | 日韩免费成人av | 久久日韩精品 | 男人靠女人免费视频网站 | 可以免费看的av网站 | 91亚洲精品国偷拍 | 成人性生活免费视频 | 波多野结衣中文字幕一区 | 国产精品视频合集 | 天天拍夜夜拍 | 免费的黄色的网站 | 久久影视| 黄色小视频在线观看 | 91免费观看视频 | 搡国产老太xxx网站 高h喷汁呻吟3p | 呦呦av | 国产视频1区2区3区 国产欧美一区二区精品性色99 | 一区二区国产在线 | jizzjizz在线播放 | 波多野结衣中文字幕久久 | 国产一久久 | 亚洲av成人精品一区二区三区 | 爱爱视频在线免费观看 | 怡春院欧美 | 无遮挡又爽又刺激的视频 | 成年人免费看 | 麻豆精品影院 | 国产涩涩 | 草1024榴社区成人 | 特色黄色片|