成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JVM診斷工具中的深堆、淺堆、支配樹,你都明白嗎

開發 前端
大家在用jvm診斷工具,比如Eclipse MAT或者 Jprofiler分析堆內存的時候,都會看到一些概念或者關鍵詞,如Shallow Heap, Retained Heap, Dominator Tree等,你們知道他們是干嘛的嗎?

概述

大家在用jvm診斷工具,比如Eclipse MAT或者 Jprofiler分析堆內存的時候,都會看到一些概念或者關鍵詞,如Shallow Heap, Retained Heap, Dominator Tree等,你們知道他們是干嘛的嗎?

Eclipse MAT相關截圖:

圖片

圖片

jprofile相關截圖:

圖片

圖片

雖然上面兩個工具有點差異,但是他們表達的都是同一個意思。

淺堆(Shallow Heap、Shallow Size)

淺堆是指一個對象所消耗的內存。在32位系統中,一個對象引用會占據4個字節,一個int類型會占據4個字節,long型變量會占據8個字節,每個對象頭需要占用8個字節。根據堆快照格式不同,對象的大小可能會同8字節進行對齊。

以jdk7中String為例:2個int值共占8字節,對象引用占用4字節,對象頭8字節,合計20字節,向8字節對齊,故占24字節。

int

hash32

0

int

hash

0

ref

value

alvinalvinalvina

這24字節為String對象的淺堆大小。它與String的value實際取值無關,無論字符串長度如何,淺堆大小始終是24字節。

深堆(Retained Heap、Retained Size)

這里引入一個保留集(Retained Set)的概念,什么是保留集呢? 當對象A被垃圾回收后,可以被釋放的所有的對象集合(包括對象A本身),即對象A的保留集可以被認為是只能通過對象A被直接或間接訪問到的所有對象的集合。通俗地說,就是指僅被對象A所持有的對象的集合。

深堆是指對象的保留集中所有的對象的淺堆大小之和,也就是從堆中移除這個實例將釋放的內存量。

注意: 淺堆指對象本身占用的內存,不包括其內部引用對象的大小。一個對象的深堆指只能通過該對象訪問到的(直接或間接)所有對象的淺堆之和,即對象被回收后,可以釋放的真實空間。

圖片

舉個例子:對象A引用了C和D,對象B引用了C和E。對象A的淺堆大小只是A本身,A的深堆大小為A與D之和,因為對象C還可以被對象B訪問,所以不在對象A的深堆范圍之內。那A的實際大小是多大呢?在日常開發中,A對象的實際大小是A,C,D相加的大小。 所以說,淺堆、深堆、實際大小都是不一樣的。

支配樹(Dominator Tree)

支配樹可以用來顯示堆轉儲中最大的對象。樹的下一層列出了如果刪除對父節點的所有傳入引用將被垃圾回收的對象。

支配樹是一個強大的工具,用于研究哪些對象保持哪些對象存活。同樣,可以根據類裝入器(例如組件)和包對樹進行分組,以簡化分析。

那究竟什么是支配樹呢?

在對象引用圖中,所有指向對象B的路徑都經過對象A,則認為對象A支配對象B。如果對象A是離對象B最近的一個支配對象,則認為對象A為對象B的直接支配者。支配樹是基于對象間的引用圖所建立的。

舉個例子:

圖片

左圖表示對象引用圖,右圖表示左圖所對應的支配樹。

  • 對象A和B由根對象直接支配,由于在到對象C的路徑中,可以經過A,也可以經過B,因此對象C的直接支配者也是根對象。
  • 對象F與對象D相互引用,因為到對象F的所有路徑必然經過對象D,因此,對象D是對象F的直接支配者。
  • 而到對象D的所有路徑中,必然經過對象C,即使是從對象F到對象D的引用,從根節點出發,也是經過對象C的,所以,對象D的直接支配者為對象C。
  • 同理,對象E支配對象G。到達對象H的可以通過對象D,也可以通過對象E,因此對象D和E都不能支配對象H。
  • 經過對象C既可以到達D也可以到達E,因此對象C為對象H的直接支配者。

總結

本文總結了jvm診斷工具比如jprofiler、eclipse mat等一些共通的概念,希望對大家有幫助。

責任編輯:武曉燕 來源: JAVA旭陽
相關推薦

2020-07-13 09:16:04

Java集合

2010-09-27 08:38:49

JVM堆JVM棧

2022-06-04 07:46:41

HeapJVM

2023-07-31 07:48:43

Java內存虛擬機

2023-05-07 08:04:36

Java程序回收算法

2023-05-10 11:16:01

Java虛擬機對象

2022-07-03 20:31:59

JVMJava虛擬機

2019-02-26 14:33:22

JVM內存虛擬機

2022-01-16 18:55:33

MySQL事務數據庫

2020-03-06 16:08:46

堆結構堆排序應用

2022-10-08 08:09:13

MGRGreatSQL事務

2020-03-10 08:01:05

Java堆內存線程共享

2017-01-11 14:02:32

JVM源碼內存

2021-07-28 20:12:17

WindowsHeap內存

2015-08-06 14:54:50

JavaScript分析工具OneHeap

2021-07-16 12:33:24

Javascript深拷貝淺拷貝

2023-10-14 17:49:25

Java存儲

2009-06-08 22:01:03

Java堆Java棧區別

2009-11-25 11:08:28

JVM基礎概念數據類型堆與棧

2011-07-22 16:50:05

JAVA
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄色毛片在线观看 | 国产欧美精品一区二区 | 中文字幕一区二区三区不卡 | 亚洲欧美中文日韩在线v日本 | 青青草av | 91网站在线播放 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 亚洲乱码一区二区三区在线观看 | 性生生活大片免费看视频 | 国产精品一区二区视频 | 天天操操操操操 | av免费观看在线 | 成人天堂 | 亚洲免费视频网站 | 日韩综合在线播放 | 国产免费一区二区三区免费视频 | 久久综合久色欧美综合狠狠 | 99pao成人国产永久免费视频 | 精品国产一区二区在线 | 亚洲网址在线观看 | 亚洲一区中文字幕 | 羞羞视频网 | 国产一区二区黑人欧美xxxx | 久久国产精品久久久久久 | 一区二区三区四区在线播放 | 日韩在线观看中文字幕 | 国产一区精品 | 国产欧美精品一区二区 | 日韩一区二区三区四区五区 | 毛片99 | 久久精品成人 | 伊人春色在线 | 日韩中文一区二区三区 | 911网站大全在线观看 | 波多野结衣一区二区 | 看av电影 | 日韩精品在线看 | 亚洲国产精品一区二区三区 | 日本免费一区二区三区 | 久久久一二三区 | 成人在线视 |