国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

android - java中使用MAT是shallow size 單位是什么

瀏覽:126日期:2024-01-27 09:49:52

問題描述

java中shallow size 單位是什么

問題解答

回答1:

想要說清楚shallow size就必須要提到Retained Size。shallow size: 表示自身對象占用的大小。retained size: 自身對象+引用對象的retained大小。

先借用一張圖,這張圖更能清楚的表示他們之間的計算關(guān)系。android - java中使用MAT是shallow size 單位是什么

B的shallow size = B;

B的retained size = B shallow size + C retained size + D retained size;

在舉例之前,首先要了解JAVA對象在堆中的存儲,我們以32位JVM虛擬機(jī)為例:JAVA對象在堆中共有3個部分組成:

對象頭 對象頭又包含兩部分?jǐn)?shù)據(jù); 一:運行時數(shù)據(jù)。 32位JVM為32位即4byte.64位為8byte. 二:類型指針。

實例數(shù)據(jù) 即存放實例變量的數(shù)據(jù),變量類型包括兩種 基本類型變量和引用變量。 基本類型變量所占據(jù)的字節(jié)大小就不說了,引用變量我們存放的是指針。

填充數(shù)據(jù) 對象存儲空間為8byte的整數(shù)倍,如果對象頭+實例數(shù)據(jù)不足8byte的整數(shù)倍,則進(jìn)行填充。

說到引用類型大小,32位虛擬機(jī)下引用占據(jù)4byte. 64位虛擬機(jī)下如果不開啟指針壓縮,則引用占據(jù)8byte。

下面我們根據(jù)例子進(jìn)行說明:

public class TestObjSize { private int a = 1; private boolean b = true; private TestObjSize testObjSize;public static void main(String[] args) {Object object = new Object();TestObjSize test = new TestObjSize();//這個new出來的對象記為obj1test.testObjSize = new TestObjSize();//這個new出來的對象記為obj2System.out.println(object.hashCode());System.out.println(test.hashCode());try { Thread.sleep(3000000);} catch (InterruptedException e) { e.printStackTrace();} }}

因為shallow size與實例變量是否有引用無關(guān),所我們先分析下**TestObjSize的shallow size,shallow size = 4byte(對象頭) + 4byte(類型指針) + 4byte(int a) + 1byte(boolean b) + 4byte(TestObjSize引用) = 17;** 17不是8的整數(shù)倍所以會有7個byte的填充數(shù)據(jù),最終TestObjSize類型的實例對象的shallow size = 24;

根據(jù)例子我們看到obj2對象的testObjSize = null,obj2的retained size = obj2的shallow size = 24;obj1對象的testObjSize為obj2,所以obj1的retained size = obj1的shallow size + obj2的retained size = 48;

最后附上heapdump!

android - java中使用MAT是shallow size 單位是什么

如有錯誤,請看客指證。

標(biāo)簽: java
相關(guān)文章:
主站蜘蛛池模板: 浦东新区| 吴堡县| 河北区| 梁平县| 贵州省| 阿尔山市| 资中县| 湖南省| 哈尔滨市| 崇左市| 尤溪县| 海城市| 杂多县| 周至县| 虎林市| 堆龙德庆县| 新津县| 绍兴县| 林周县| 密云县| 利辛县| 鹿邑县| 梓潼县| 邛崃市| 黑水县| 阿克陶县| 左云县| 永康市| 元氏县| 金平| 郁南县| 抚州市| 库伦旗| 江口县| 江陵县| 吕梁市| 岳阳市| 金堂县| 来宾市| 鹤山市| 噶尔县|