2010-01-19 53 views
18

在64位平臺上可以爲java分配的堆空間的最大數量是多少?它是無限的嗎?64位Java的最大內存

+0

爲什麼你認爲它是無限的? – 2010-01-19 13:40:37

回答

16

理論上2 ,但可能有限制(顯然)

根據this FAQ它是隻受內存和交換空間在本地系統上的限制:

在64位虛擬機,你有64位的可尋址性,從而導致最大Java堆大小僅受系統提供的物理內存和交換空間量的限制。

另請參見爲什麼我無法使用32位JVM獲得更大的堆?

另外請記住,您需要通過命令行設置最大堆。沒有-Xmx命令。沒有它根據相同的FAQ,Java在64位機器上使用64mb + 30%= 83.2mb作爲默認最大堆。

java -Xmx1000g myClass 

在我的機器上正常工作。但它似乎還沒有支持't'修飾符,所以你不能指定最大內存的TB數量:)

+0

1000g爲你工作?我認爲'java'會在接受這個選項之前驗證是否有足夠的內存。 – asgs 2016-10-02 09:40:07

13

如果你可以將宇宙中的每個原子變成RAM的一個字節,你可以在64位地址空間中分配它。

其實,這有點誇大其詞。

宇宙中有10^80個原子(根據WolframAlpha),在64位系統中有2^64個字節的地址空間,所以你只能在每個5×10^60個原子中尋址1個。但是如果你有18個qintillion字節的RAM,你可能需要一些量子黑洞來供電。

+0

@Stephen,我在您發表評論前編輯了答案。 WolframAlpha規則! – 2010-01-19 13:34:47

+2

不想等待完整的收集! – overthink 2010-01-19 13:53:41

+4

你需要266位索引宇宙中的每個原子 – 2010-01-19 14:45:54

0

理論上它在2^632^64字節之間。

在實踐中,它受限於機器上可用的物理內存和交換空間量。而物理內存又受到芯片組(即物理內存地址總線上的地址引腳數量)和主板(即DIMM插槽的數量和尺寸)的限制。

+2

對於AMD64,目前的規格預見了40-52個地址引腳。此外,他們還支持NUMA體系結構,其中每個處理器都有一塊其他處理器只能間接訪問的內存塊。 – MSalters 2010-01-19 14:49:01

3

這可能取決於您的虛擬機正在運行的系統。如果您運行的是AMD x64體系結構,則當前運行的處理器的地址空間使用48位,而不是64位。這導致理論最大值大約爲256 TB。 (請參閱http://en.wikipedia.org/wiki/X86-64

我不是虛擬機專家,但是任何現代操作系統通常都會提供與物理RAM和可用虛擬內存一樣多的內存。 也許多數民衆贊成什麼虛擬機將傳遞到您的應用程序取決於其配置。

+3

AMD相關手冊指出虛擬地址空間實際上是64位(章節2.2.1,AMD64體系結構程序員手冊,v3.14,2007年9月) – MSalters 2010-01-19 14:47:10

2

對於來自Sun的最新VM,實際堆限制大小通常是可用物理和/或虛擬內存的512倍。即使理論上的限制高得多,啓動時VM也會爲每512字節的堆內存分配1個字節用於管理,因此1TB的堆將立即需要2GB用於內存管理。

+0

請您引用一個參考嗎? – Fakrudeen 2011-11-14 14:51:50

+0

什麼參考? – jarnbjo 2011-11-14 17:18:39

+0

512倍的事情... – Fakrudeen 2011-11-16 16:52:26

相關問題