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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java垃圾回收到老年代次数,Java垃圾回收之回收算法

發(fā)布時間:2024/1/23 java 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java垃圾回收到老年代次数,Java垃圾回收之回收算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

問題:談談你了解的垃圾回收算法

1、標記-清除算法(Mark and Sweep)

標記:從跟集合進行掃描,對存活的對象進行標記

清除:對堆內存從頭到尾進行線性遍歷,回收不可達對象內存

優(yōu)點:簡單

缺點:容易出現(xiàn)碎片

這個算法會導致出現(xiàn)大量的不連續(xù)的內存碎片,可能會導致在之后的分配較大的對象時,無法找到足夠的連續(xù)內存,會觸發(fā)另外一次垃圾回收。上圖就出現(xiàn)了三個內存碎片塊

2、復制算法(copying 適用于對象存活率低的場景,年輕代)

2.1?分為對象面和空閑面

2.2 對象在對象面上創(chuàng)建

2.3 存活的對象被對象面復制到空閑面

2.4 將對象面所有對象內存清除

優(yōu)點:

1、解決碎片化問題

2、順序分配內存,簡單高效

3、適用于對象存活率低的場景

缺點:

1、在面對對象回收率高的情況下,就顯得力不從心了。要進行較多的復制操作,效率將會變低,

2、更關鍵的是:如果不想浪費50%的空間,就需要額外的空間進行分配和擔保,為應對對象面中對象100%存活的極端情況。

3、標記-整理算法(Compacting,適用于老年代中)

標記:從根集合進行掃描,對存活的對象進行標記

清除:移動所有存活的對象,且按照內存地址次序依次排列,然后將末端內存地址以后的內存全部回收

優(yōu)點:

解決了標記-清除算法導致的碎片化問題(避免了內存的不連續(xù)性)

不用設置兩塊內存互換

適用于存活率高的場景

4、分代收集算法(Generational Collector)

4.1 垃圾回收算法的組合拳

4.2 按照對象生命周期的不同劃分區(qū)域以采用不同的垃圾回收算法(怎樣判斷對象的生命周期?)

4.3 目的:提高JVM的回收效率

(三個模塊,年輕代,老年代,永久代)

-------------------------------------------

(永久代被取消了,只剩下,年輕代----》復制清除算法? 和? ?老年代---》標記清除算法或標記整理算法)

分代收集算法的GC分類

Minor GC---->采用復制算法,用于年輕代中

Full GC ------>

年輕代:盡可能快速地收集掉那些生命周期短的對象

Eden區(qū)----》對象剛剛被創(chuàng)建就是放在這里,當然,如果這里不夠放,就會放到survivro或老年代上

兩個Survivor區(qū)---》

-XX: MaxTenuringThreshold? 這個參考可以設置對象的“歲數(shù)”,默認對象的歲數(shù)是15歲,超過這個值就被轉移到老年代---》經(jīng)過15次minor gc回收之后,還存活下來的對象

問題:對象如何晉升到老年代中?

1、經(jīng)歷一定Minor次數(shù)依然存活的對象

2、Survivor區(qū)中放不下的對象

3、新生成的大對象(-XX: +PretenuerSizeThreshold )

常用的調優(yōu)參數(shù):

-XX:SurvivorRatio: Eden 和其中一個Survivor的比值,默認8:1

-XX:NewRatio :老年代和年輕代內存大小的比例

-XX: MaxTenuringThreshold :對象從年輕代晉升到老年代經(jīng)過GC次數(shù)的最大閥值

老年代:存放生命周期較長的對象----》采用標記-清理算法 或? 標記-整理算法

1、Full GC 和 Major GC(一般的理解是Full GC等于 Major GC,收集整個GC堆。注意:如果有人問你Major GC的時候,一定要問清楚是Full GC 還是僅僅指老年代的GC)

2、Full GC 比 Minor GC 慢,但執(zhí)行頻率低

問題:什么時候觸發(fā)Full GC?什么條件?

1、老年代空間不足(為了避免Full GC的發(fā)生,就避免產(chǎn)生大對象的生成)

2、永久代空間不足(這個只是針對JDK7和以前的版本,這也是為什么用元空間替代永久代的原因,為了降低Full GC的頻率!!!!)

3、CMS GC時出現(xiàn) promotion failed ,concurrent mode failure

4、Minor GC晉升到老年代的平均大小大于老年代的剩余空間

5、調用System.gc()----->注意:這只是碼農(nóng)提醒虛擬機進行Full GC操作,實際上還是在不確定的時上進行Full GC

6、使用RMI 進行RPC或管理的JDK應用,每小時執(zhí)行1次Full GC

(一般能說出三點就可以,三點以上就更好)

總結

以上是生活随笔為你收集整理的java垃圾回收到老年代次数,Java垃圾回收之回收算法的全部內容,希望文章能夠幫你解決所遇到的問題。

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