2013-08-04 29 views

回答

2

您可以使用x64 JVM。它使用8字節。

但是,如果您有對象,則它們中的每個對象都是最少40個字節...無論如何它都不適合4GB內存。

+0

每個對象的最小大小爲40字節?你確定/你有源嗎?從我記得的情況來看,GC頭最多有三個,有時甚至是兩個單詞,所以即使我們忽略了空類,最小對象大小應該大致爲四個字= 16個字節。 – delnan

+1

一個'new Object()'需要12個字節的內存在熱點上,對齊到16個字節。 – assylias

+0

好吧,你說得對,看起來40是太多了。但顯然更多的是16,你應該添加內存,這需要保存對象的引用,以便它們不僅僅是垃圾收集。無論如何,即使是20個字節,也至少比可容納x32的內存空間多20倍。 – kan

5

32-bit JVM確實使用32位作爲參考,但64-bit JVM可以使用64-bits作爲參考。

之前,你耗盡上一個32-bit JVM引用數量的2 限制,你會得到一個OutOfMemoryError(你不能比堆2GB更上一個32-bit JVM,不管可用RAM )。

64-bit JVM上,您可以創建多於2個對象,假設您有足夠的內存來存儲它們。

請注意,某些64位JVM可能使用32位指針(CompressedOops flag on hotspot)用於性能目的。

+0

我測試它在64位環境,真的有4個字節指向obejct – user1010434

+2

在3.5gbs下它將使用'壓縮oops'。即使使用64位JVM,也會將參考大小壓縮爲4個字節。 –

相關問題