java物件占用記憶體分析

2021-07-14 18:07:11 字數 1541 閱讀 9944

前言

空物件佔8個位元組

有資料成員的話,你把資料成員按基本資料型別和物件引用分開統計。 

基本資料型別按byte/boolean=1,char/short=2,int/float=4,long/double=8,累加,然後對齊到8的倍數。 

物件引用按每個4位元組,累加,然後對齊到8個位元組的倍數。 

物件占用位元組數=基本的8位元組+基本資料型別所佔的

+物件引用所佔的 

比如 class a 

佔 8(基本)+8(int 4+char 2=6,對齊到8)= 16個位元組 

再比如: 

class b 

佔 8(基本)+8(long8+byte1=9,對齊到8)+8(物件引用4,對齊到8)=32個位元組 

=============== 

如果你是從別的類繼承的,父類的也要算上。 

直接上**

實現類public

abstract

class sizeof  else      

}     

rungc();     

// 例項化之後堆已使用大小   

long heap2 = usedmemory();     

final

int size = math.round(((float) (heap2 - heap1)) / count);     

// 釋放記憶體   

for (int i = 0; i < count; ++i)      

objects = null;     

return size;     

}     

private

void rungc() throws exception      

}     

private

void _rungc() throws exception      

}     

/**  

*  * 堆中已使用記憶體  

*  * @return 堆中已使用記憶體  

*/private

long usedmemory()      

}    

測試public

class sizeofobject extends sizeof      

public

static

void main(string args) throws exception      

}    

輸出為:所佔記憶體:8位元組 

利用序列化(serializable)計算物件的大小 

下面**可以計算session的大小: 

將session中的所有物件輸出到檔案中,檔案的大小就是物件的大小. 

try      

s.flush();     

s.close();     

f.close();     

} catch (exception e)     

java物件占用記憶體情況

32位作業系統中 乙個物件的物件頭占用8位元組,物件中的乙個引用佔4個位元組,需要補齊位8的倍數 一維陣列的為特殊物件,物件頭佔8個位元組,加上4位元組的長度數量,加上陣列長度n 陣列型別 string型別占用的位元組數字40 2n pandding 補齊為8的個數 64位作業系統中 乙個物件的物件...

java 物件記憶體膨脹與Set記憶體占用問題研究

遇到乙個有意思的業務。有兩個單列檔案,乙個500m乙個700m,共1.2g,2e個資料,要將這兩個單列檔案中的資料提取出來去重。最簡單的思路,理論大小為1.2g的資料塞進set裡直接去重,發現程式跑著跑著就跑不動了,用jstat檢視,發現原來沒有賦予初始化引數,預設的初始化堆記憶體太小,導致程式跑不...

程式占用記憶體分析

堆與棧有什麼區別?一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由o...