2012-12-07 77 views
4

考慮:Java接口和內存分配

public SomeClass implements SomeInterface{...} 

SomeClass obj = new SomeClass(); 

SomeInterface x = obj; 

我想涉及3號線到我的內存管理非常基本的理解。 我知道由「obj」表示的內存位置只包含一個指向SomeClass的內存位置的指針。假設我正在使用64位JVM,那麼最多可以爲「obj」指針分配64位。 JRE實現x時在內存中創建了什麼?它只是一個指向SomeClass的64位指針?

+0

是的。 x也只是對同一個對象的引用。 –

回答

3

無論您如何聲明,每個對象引用都佔用相同的內存量。

所以xobj是兩個distict引用,它們恰好指向相同的東西。

+1

*每個對象引用佔用相同數量的內存*。這是否在CompressedOops下嚴格實現? https://wikis.oracle.com/display/HotSpotInternals/CompressedOops – NPE

+0

@NPE好吧,如果你足夠深入,許多簡單的事實並不成立。就像現實世界中的物體並不是真的有顏色等。但我認爲,爲了這個問題,我的陳述是真實的。 –

+0

那麼將x聲明爲SomeInterface類型的目的是什麼?爲什麼不直接說SomeClass x = obj;這兩個陳述是否完全一樣? –

0

沒有實際的內存開銷,SomeInterface聲明在這一點上只是一個語言結構,鍵入x供編譯器稍後檢查。

+0

你是說'x'佔用零存儲量,包括沒有存儲的參考本身? – NPE

+0

不,有變量的存儲空間,但它與其他任何引用都沒有區別。它是一個界面的事實並沒有改變這一點。 –

1

簡單語句引用在Java中聲明瞭相同的內存。

Stack and Heap for Memory Allocation這將幫助你詳細如何

enter image description here 作品理解。

+0

謝謝你的鏈接。我會通過它。 –