JVM分代回收算法通俗理解

jvm區域總體分兩類,heap區和非heap區。heap區又分:Eden Space(伊甸園)、Survivor Space(倖存者區)、Tenured Gen(老年代-養老區)。 非heap區又分:Code Cache(代碼緩存區)、Perm Gen(永久代)、Jvm Stack(java虛擬機棧)、Local Method Statck(本地方法棧)。

HotSpot虛擬機GC算法採用分代收集算法:

1、一個人(對象)出來(new 出來)後會在Eden Space(伊甸園)無憂無慮的生活,直到GC到來打破了他們平靜的生活。GC會逐一問清楚每個對象的情況,有沒有錢(此對象的引用)啊,因爲GC想賺錢呀,有錢的纔可以敲詐嘛。然後富人就會進入Survivor Space(倖存者區),窮人的就直接kill掉。

2、 大對象直接近入老年代-養老區:有些世界土豪出生。 他父母直接砸了幾百億, 身份顯赫, 進入老年代,有錢就是囂張!不用去Eden Space(伊甸園)。

3、Survivor Space(倖存者區有兩個區域:生活區和無人區)爲什麼有兩個區 from Survivor(生活區) ,to Survivor(無人區) .每次GC想要去倖存者區敲詐 ,會去from Survivor(生活區的)所有人帶到to Survivor(無人區) ,然後開始敲詐, 被敲詐包括本次15次 的土豪,進入養老區,交不起保護費 的殺死, 沒滿足15 次,但是手裏還有點錢的就生活在無人區,這個無人區就變成了生活區, 以前的生活區(人都被移走了) 又變成了無人區

 

4、並不是進入Survivor Space(倖存者區)後就保證人身是安全的,但至少可以活段時間。

GC會定期(可以自定義)會對這些人進行敲詐,億萬富翁每次都給錢,GC很滿意,就讓其進入了Genured Gen(養老區)。

(每經過一次Minor GC,會給這個富翁添加一次記錄,當某些富翁連續給了大概15 年保護費,就可以去養老區了)萬元戶經不住幾次敲詐就沒錢了,GC看沒有啥價值啦,就直接kill掉了。

5、進入到養老區的人基本就可以保證人身安全啦,但是億萬富豪有的也會揮霍成窮光蛋,只要錢沒了,GC還是kill掉。

 

分區的目的:

標記-清理算法:新生區由於對象產生的比較多並且大都是朝生夕滅的,所以直接採用標記-清理算法(窮鬼們直接砍死, 發現你沒錢了,直接一刀拜拜,所以用標記-清理)。

複製算法:養老區生命力很強,則採用複製算法 (富豪們交給很多錢了,但是這次又沒錢了, 因爲以前打點 的好, 和上面關係硬 ,不能直接殺了他,所以找個藉口說,我們爲大家組織一次海上旅遊,當然都是那些交不起保護費的,然後安排一個海上事故, 這些把錢揮霍完的富豪也死翹翹了)

 

非heap區域中Perm Gen中放着類、方法的定義,jvm Stack區域放着方法參數、局域變量等的引用,方法執行順序按照棧的先入後出方式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章