溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java怎么計(jì)算對(duì)象大小

發(fā)布時(shí)間:2020-05-29 21:04:51 來(lái)源:億速云 閱讀:348 作者:鴿子 欄目:編程語(yǔ)言

Java對(duì)象大小的計(jì)算方式
首先我們需要知道的是 Java 對(duì)象是包含三部分?jǐn)?shù)據(jù)的: 
1.對(duì)象頭 
2.實(shí)例數(shù)據(jù) 
3.對(duì)齊填充(可能沒有,因?yàn)?java 中規(guī)定對(duì)象的起始地址必須是 8 bytes 的正數(shù)倍) 

對(duì)于普通對(duì)象而言,對(duì)象頭中包括 mark word(8 bytes)、kclass(沒有開啟壓縮的時(shí)候是 8 bytes,開啟壓縮了的話,就是 4 bytes),如果是數(shù)組類型的對(duì)象話,這里還有一個(gè)數(shù)組長(zhǎng)度字段,4字節(jié). 

在 JDK6 64位 23 update+ 之后都默認(rèn)開啟了指針壓縮功能. 

現(xiàn)在驗(yàn)證 java 對(duì)象占幾個(gè)字節(jié). 

public class Person { 
    int age; 

我使用的是64位jdk1.8,按照理論分析,Person 對(duì)象應(yīng)該占的字節(jié)數(shù): 
8(mark word) + 4(kclass) + 4(實(shí)例數(shù)據(jù)) + 0(不需要對(duì)齊填充) = 16B. 

而通過 visualVM 工具查看的結(jié)果也是 16B. 

現(xiàn)在來(lái)分析下數(shù)組的內(nèi)存占用情況. 

public class ObjectHeaderSizeTest { 
    public static void main(String[] args) { 
        Person[] person = new Person[4]; 
        System.out.println(person); 

        Thread.currentThread().suspend(); 
    } 

首先我們知道 Person 對(duì)象占 16B,那么 person 占用的字節(jié)數(shù)為: 
8 + 4 + 4 + 8 * 4 + 0 = 48B. 

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI