2010-08-09 27 views
2

我目前正在爲Android實現一些圖像處理代碼。我知道內存限制,很高興在它們內部編碼。但是,我找不到任何文檔可以讓我計算出可能要實例化(在堆上)的給定類的每個實例的字節數。Android中的類實例大小

我是一名經驗豐富的C++程序員,所以我相對有能力爲我的C++代碼(考慮處理器數據路徑寬度,平臺對齊問題等)制定出結構/類的大小問題。我知道Java通常處於更高級別的抽象層次,因此我可能無法保證一般Java VM的特定內存使用率。然而,考慮到android運行在不同的虛擬機上,並且考慮到開發人員強烈的內存限制:假設可能有一組相對確定性的規則來計算給定對象實例的大小,因爲知道成員。

任何人都知道這些規則?

謝謝!

亞歷

回答

2

Dalvikvm的內存開銷是與其他主流的32位虛擬機,包括熱點是一致的。

dalvikvm中每個對象的基本開銷是兩個32位字。爲此,您爲每個長字段或雙字段添加兩個單詞,併爲每個字段添加一個單詞。靜態字段不計入此總數。

如果您通過調用unoverridden Object.hashCode()System.identityHashCode()來鍛鍊身份hashCode,可能會有額外的開銷。

如果您在對象上進行同步,則會有額外的內存開銷。

+0

這正是我需要知道的。非常感謝你。 – 2010-08-11 12:47:52