jvm垃圾回收

 

注意:垃圾回收回收的是無任何引用對象佔據的內存空間,而不是對象自己java

在jvm中堆空間劃分爲三個代:年輕代(Young Generation)、年老代(Old Generation)和永久代(Permanent Generation)。年輕代和年老代是存儲動態產生的對象。永久帶主要是存儲的是java的類信息,包括解析獲得的方法、屬性、字段等等。永久帶基本 不參與垃圾回收。咱們這裏討論的垃圾回收主要是針對年輕代和年老代。具體以下圖。 緩存

年輕代又分紅3個部分,一個eden區和兩個相同的survior區。剛開始建立的對象都是放置在eden區的。分紅這樣3個部分,主要是爲了生命 週期短的對象儘可能留在年輕代。當eden區申請不到空間的時候,進行minorGC,把存活的對象拷貝到survior。年老代主要存放生命週期比較長的 對象,好比緩存對象。具體jvm內存回收過程描述以下(能夠結合上圖):jvm

一、對象在Eden區完成內存分配
二、當Eden區滿了,再建立對象,會由於申請不到空間,觸發minorGC,進行young(eden+1survivor)區的垃圾回收
三、minorGC時,Eden不能被回收的對象被放入到空的survivor(Eden確定會被清空),另外一個survivor裏不能被GC回收的對象也會被放入這個survivor,始終保證一個survivor是空的
四、當作第3步的時候,若是發現survivor滿了,則這些對象被copy到old區,或者survivor並無滿,可是有些對象已經足夠Old,也被放入Old區 XX:MaxTenuringThreshold
五、當Old區被放滿的以後,進行fullGC性能

在知道垃圾回收機制之後,你們能夠在對jvm中堆的各個參數進行優化設置,來提升性能。優化

相關文章
相關標籤/搜索