中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java對象在內存中占用多少空間

發布時間:2021-06-22 14:39:31 來源:億速云 閱讀:215 作者:Leah 欄目:大數據

Java對象在內存中占用多少空間,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

注意這種計算方式適用于OpenJDK和Oracle JDK兩個版本,其它版本可能有所不同。

從整體來看,java對象由對象頭、實例數據、對齊填充3個部分組成,其中對齊填充是指對象頭的占用空間與實例數據的占用空間如果不是8的整數倍,就需要添加pad填滿直到總的占用空間為8的倍數。這里暫時說的8的整數倍,因為在lucene源碼中64位的虛擬機是動態獲取的(具體原因暫時不清楚,如果像網上和書上說的是固定8的整數倍就沒必要動態獲取了,盡信書不如無書有些東西沒看到源碼前最好別下定論),32位是固定的8個字節。對象引用的大小在64位jvm中如果開啟指針壓縮為4個字節否則8個字節,在32位jvm中只占4個字節。

普通對象的對象頭大小為對象引用的大小加上8字節,數組的對象頭等于普通對象頭的大小加上4個字節的和并且要按照8字節對齊。

字節數組占用的空間=數組的對象頭+1*數組個數的和并且按照8字節對齊;

boolean數組的占用空間與字節數組的占用空間相同;

char數組的占用空間=數組的對象頭+2*數組個數的和并且按照8字節對齊;

short數組的占用空間與char數組的占用空間相同;

int數組的占用空間=數組的對象頭+4*數組個數的和并且按照8字節對齊;

float數組的占用空間與int數組的占用空間相同;

long數組的占用空間=數組的對象頭+8*數組個數的和并且按照8字節對齊;

double數組的占用空間與long數組的占用空間相同;

對象數組與以上數組稍有不同,數組中記錄的是所有對象的引用地址,因此占用空間=數組的對象頭+對象引用的大小*數組個數的和并且按照8字節對齊后再加上每個對象自身占用的實際空間;

現在詳細說明每個對象的占用空間,除了對象頭,其中的實例數據部分(不包括靜態變量)包括基本類型和引用類型(所有的數組和普通對象都是引用類型)。引用類型的指針大小在上面已經說過,指向真正對象的占用空間就是現在討論的,實際上這就是一個遞歸,例如:

class Test{

    int a;

   byte[] b=new byte[10];

}

假設在64位jvm中指針壓縮的情況下,Test對象占用的空間=align(對象頭(4+8)+數據(4+4))+size(b)。注意:所有的引用類型不與本對象在一個連續的地址空間中,所以字節對齊align時不能包含引用對象的實際大小!

在lucene中為了計算對象實際占用空間就需要實現Accountable接口,就是因為當對象內部存在一個對象引用時就需要計算引用對象實際占用空間!

關于Java對象在內存中占用多少空間問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

出国| 连云港市| 盐边县| 明光市| 南乐县| 楚雄市| 黎平县| 马龙县| 永仁县| 耒阳市| 磐安县| 黔南| 磐安县| 罗田县| 银川市| 公主岭市| 静海县| 翁牛特旗| 高陵县| 读书| 托克逊县| 梁平县| 小金县| 深水埗区| 寿光市| 绿春县| 马关县| 沂水县| 乳山市| 呼玛县| 秦皇岛市| 仙游县| 利辛县| 井陉县| 康马县| 来宾市| 临颍县| 巨鹿县| 重庆市| 东丰县| 龙州县|