理解VisualVM中的保留大小(Retained Size)

Shallow Size and Retained Size

Shallow Size and Retained Size 的含義都是指的實例對象箭启,不是類本身亿眠。

下面將用 sampleClass 表示類Sample的一個實例(instance)

Shallow Size 含義

Shallow Size 就是對象本身所占用的大小,不包括其引用的對象。

舉個例子:

public class SampleClass {
    // age 屬于 Shallow Size
    private int age = 1;
    // String 類型引用本身 name 屬于 Shallow Size唇辨,
    // 被引用對象 "SOME_STRING" 不屬于 Sample 的實例Shallow Size
    private String name = SOME_STRING;
    // 數(shù)組所有內容都屬于 Shallow Size
    private int[] ids = {1, 2, 3};
}

Retained Size 含義

針對可達對象

可達對象就是說免都,從 GC roots 開始搜索锉罐,能夠到達的對象,也就是說下一次GC不會被清理的對象绕娘,采用下面的計算方法來得到 Retained Size 對象

Retained Size的含義相對于Shallow Size 不太好理解脓规。依然是上面的例子,在不同的情況下险领,sampleClass 的Retained Size 并不相同抖拦。下面引用StackOverFlow上的一個回答來解釋這個問題。

Retained size of an object is its shallow size plus the shallow sizes of the objects that are accessible, directly or indirectly, only from this object. In other words, the retained size represents the amount of memory that will be freed by the garbage collector when this object is collected.

圖一

上圖應該比較容易理解舷暮,看起來每個對象的Retained Size 都符合公式( Retained Size = Shallow Size + 直接子對象的 Retained Size),并沒有什么問題噩茄,然后我們看另外一種引用關系中下面,Obj1 的Retained Size 就會發(fā)生變化。

圖二

第二種圖中绩聘,你會發(fā)現(xiàn)Obj2的Retained Size 不再符合我們剛剛總結出來的公式沥割,這是因為Obj2的直接子對象Obj5還被Obj6所引用,造成的結果就是凿菩,如果Obj2被回收机杜,Obj5并不會被回收,所以 Obj2 的Retained Size就不應該包括 Obj5 的Retained Size. 雖然 Obj2 的 Retained Size 發(fā)生了變化衅谷,但是 Obj1 的 Retained Size 并沒有發(fā)生變化椒拗。

針對不可達對象

指的是下一次 GC 會被清理的對象,也就是說沒有其他對象引用自己的對象获黔。

如果你嘗試使用 VisualVM 分析dump文件的時候蚀苛,你會發(fā)現(xiàn)有些對象的 Retained Size 居然是0,這個0就推翻了上面那種分析方法的的結論玷氏,覺得無論什么樣的對象肯定是會有 Shallow Size 的堵未,不可能為0。

通過分析最后可以這樣理解:針對不可達對象盏触,也就是可以完全被清除的對象渗蟹,Retained Size 都是0

附錄

理解誤區(qū)

好多人是簡單的將保留大小描述為,該對象本身和其直接引用或者間接引用的對象的大小的總和赞辩。這種理解是片面的雌芽,就像上面例子中的 Obj2 一樣,如果按照這種理解就會得到錯誤的結論诗宣。

如何在 VisualVM 中計算保留大斜炫隆(Retained Size)

image

一些 Retained Size 為 0 的例子

image
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市召庞,隨后出現(xiàn)的幾起案子岛心,更是在濱河造成了極大的恐慌来破,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忘古,死亡現(xiàn)場離奇詭異徘禁,居然都是意外死亡,警方通過查閱死者的電腦和手機髓堪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門送朱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人干旁,你說我怎么就攤上這事驶沼。” “怎么了争群?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵回怜,是天一觀的道長。 經常有香客問我换薄,道長玉雾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任轻要,我火速辦了婚禮复旬,結果婚禮上,老公的妹妹穿的比我還像新娘冲泥。我一直安慰自己驹碍,他們只是感情好,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布凡恍。 她就那樣靜靜地躺著幸冻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪咳焚。 梳的紋絲不亂的頭發(fā)上洽损,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機與錄音革半,去河邊找鬼碑定。 笑死,一個胖子當著我的面吹牛又官,可吹牛的內容都是我干的延刘。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼六敬,長吁一口氣:“原來是場噩夢啊……” “哼碘赖!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤普泡,失蹤者是張志新(化名)和其女友劉穎播掷,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撼班,經...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡歧匈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了砰嘁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片件炉。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖矮湘,靈堂內的尸體忽然破棺而出斟冕,到底是詐尸還是另有隱情,我是刑警寧澤缅阳,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布宫静,位于F島的核電站,受9級特大地震影響券时,放射性物質發(fā)生泄漏。R本人自食惡果不足惜伏伯,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一橘洞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧说搅,春花似錦炸枣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至候引,卻和暖如春侯养,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背澄干。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工逛揩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人麸俘。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓辩稽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親从媚。 傳聞我的和親對象是個殘疾皇子逞泄,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內容