2015-05-12 111 views
5

當我們有一個參考變量例如爲了簡化它Integer i我們可以假設i的大小對於實際的int + 4字節填充即24字節大約爲16字節開銷+ 4字節。
所以我的問題是,如果i爲空我們只有4個字節的引用沒有指向任何地方或有任何其他額外的「隱藏」信息添加到此?空對象有多少個字節?

+0

你的意思是對象,或參考? – yshavit

+0

正確。我們只有引用的4個字節指向空。 –

回答

2

如果我記得沒錯,JVM規範提到null不需要具有特定的值或表示,所以它可以是任何東西。它是什麼通常是,我不知道,但一個公平的猜測可能是32位或64位零,具體取決於JVM版本。

編輯:這裏的相關章節:http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.4

Java虛擬機規範並沒有規定具體的值編碼爲空。

乾杯,

1

是的它仍然使用內存。我相信使用4個字節的32位和8個64位。

發現它的更多信息:Java - Does null variable require space in memory

+1

如果您設置了對'null'的引用,它不會指向堆上的對象(這會消耗堆內存)。然而參考本身需要被存儲。作爲本地堆棧幀中的對象或插槽中的字段(如果它是本地變量)。這當然佔用與「普通對象指針」大小(即32或64位)一樣多的字節。在對象中可能會有一些填充字段和堆棧,有一些重用(或在遞歸的情況下多次出現同一個引用)。但那是參考實際值的所有獨立(null或不)。 – eckes