2011-04-21 128 views

回答

1

是的。 Here就是這樣做的一個例子。另一種方法是在對象聲明並在實例化對象之前和之後執行Runtime.freeMemory(),而不是查看差異。

+3

這不一定是正確的 - 因爲例如,如果JVM決定調整堆大小(增大堆大小),則會發現分配後的空間比以前多! – Liv 2011-04-21 16:36:46

+0

如果您爲多個對象重複執行此操作,則可以在大多數情況下獲得合適的尺寸。 ;) – 2011-04-21 16:39:31

+0

是的,我知道這不是完美的,但有足夠的對象實例應該給出一個相當合理的估計 – 2011-04-21 17:23:50

0

,如果你想你的程序是你使用多少內存知道使用分析器。

基本上,對象的大小是你不需要在Java中非常清楚的東西之一。使你不會爲什麼它在C/C++中如此重要。 ;)

較長的答案是,您可以使用Instrumentation.getSizeOf(Object),但它的使用並不簡單。

0

這是一個複雜的討論,因爲「尺寸」是什麼意思?例如,你的意思是說Java需要多少字節來表示一個int或char等字符?或者你的意思是它使用多少個字節來存儲對象的引用?或者JVM使用的內部結構有多少個字節用於創建和存儲該對象中的所有數據?我想冒險猜測最後2個問題的答案是依賴於操作系統的,我認爲你不能將其標準化。 (例如,在64位機器上,操作系統一次處理64位整數比32更容易 - 因此內部很可能在8字節內部表示Java int,儘管只有java int的存儲32位值)。

有辦法找出其中的一些 - 例如看看這個:http://devblog.streamy.com/2009/07/24/determine-size-of-java-object-class/ - 但它們在操作系統中不一致。

相關問題