java - jvm 年輕代 如何回收 survivor 對(duì)象
問(wèn)題描述
1.jvm年輕代內(nèi)存回收 Eden:survivor=8:1
2.采用復(fù)制算法 Eden區(qū)滿(mǎn)后標(biāo)記后將存活對(duì)象房子survivor0里 如下圖:
下一次Eden 滿(mǎn)了 會(huì)將對(duì)象放到之前清空的 survivor1的區(qū)域里
問(wèn):
1.survivor的對(duì)象如何被清理 同樣是標(biāo)記-清除/整理算法嘛?
2.對(duì)象從年輕代到老年代是經(jīng)過(guò)每次gc時(shí)候 還是動(dòng)態(tài)的進(jìn)入,當(dāng)達(dá)到某一條件晉升?什么條件
問(wèn)題解答
回答1:lz你好,之前看到你在我的文章淺析JVM之內(nèi)存管理下評(píng)論了,同時(shí)也看到了你的問(wèn)題。我的文章里面都有提到:
survivor區(qū)屬于年輕代,用的是復(fù)制收集算法
經(jīng)過(guò)數(shù)次(默認(rèn)是15次)在兩個(gè)Survivor區(qū)域移動(dòng)后還存活的對(duì)象最后會(huì)被移動(dòng)到老年代
特別大的對(duì)象直接進(jìn)入老年代
回答2:推薦看看《深入理解java虛擬機(jī)》。
1.新生代的GC算法幾乎都是復(fù)制算法,也就是說(shuō),survivor也是被復(fù)制到老年代中去的。2.對(duì)象從新生代到老年代,有幾種情況
2.1有一個(gè)年齡參數(shù)MaxTenuringThreshold用來(lái)判斷,每次對(duì)象熬過(guò)一次GC,年齡加1,當(dāng)?shù)竭_(dá)設(shè)定的閾值時(shí),可以進(jìn)入老年代。2.2比較大的對(duì)象(需要大量連續(xù)的內(nèi)存空間),同樣,虛擬機(jī)也提供了一個(gè)參數(shù)PretenureSizeThreshold,可以設(shè)置這個(gè)值,當(dāng)對(duì)象大于設(shè)置值可以直接進(jìn)入老年代。2.3如果Survivor空間中相同年齡的對(duì)象大小總和大于Survivor空間的一般,則年齡大于或等于該年齡的對(duì)象就可以進(jìn)入老年代。這里是屬于動(dòng)態(tài)判定,適應(yīng)那些內(nèi)存較小的情況
還有一些其他情況,可以看看書(shū)
相關(guān)文章:
1. macos - mac下docker如何設(shè)置代理2. 關(guān)docker hub上有些鏡像的tag被標(biāo)記““This image has vulnerabilities””3. android studio總是在processes running好久4. docker不顯示端口映射呢?5. MySQL數(shù)據(jù)庫(kù)中文亂碼的原因6. java - 請(qǐng)問(wèn)在main方法中寫(xiě)成對(duì)象名.屬性()并賦值,與直接參參數(shù)賦值輸錯(cuò)誤是什么原因?7. docker - 各位電腦上有多少個(gè)容器啊?容器一多,自己都搞混了,咋辦呢?8. angular.js - 關(guān)于$apply()9. docker-compose 為何找不到配置文件?10. dockerfile - 我用docker build的時(shí)候出現(xiàn)下邊問(wèn)題 麻煩幫我看一下
