3 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
對于堆,我們需要一個(gè)連續(xù)的內(nèi)存區(qū)域,因?yàn)槲覀冇幸欢褟亩验_始就被(縮放)偏移量索引的側(cè)數(shù)據(jù)結(jié)構(gòu)。例如,我們使用一個(gè)“卡片標(biāo)記數(shù)組”跟蹤對象引用更新,該數(shù)組為每512字節(jié)堆有一個(gè)字節(jié)。當(dāng)我們在堆中存儲引用時(shí),我們必須在卡片標(biāo)記數(shù)組中標(biāo)記相應(yīng)的字節(jié)。我們正確地移動存儲的目標(biāo)地址,并使用它來索引卡片標(biāo)記數(shù)組。在C+中尋址你無法用Java完成的算術(shù)游戲(必須:-)。
通常情況下,我們不會遇到不太大的連續(xù)區(qū)域(Windohs上最多可達(dá)1.5GB,Solaris上可高達(dá)3.8GB)。(YMMV.)在Windohs上,問題主要是在JVM啟動之前加載了一些庫,從而破壞了地址空間。使用/3GB開關(guān)不會重新建立庫的基礎(chǔ),因此對我們來說,它們?nèi)匀皇且粋€(gè)問題。
我們知道如何制作塊堆,但是使用它們會有一些開銷。與32位JVM中更大的堆相比,我們對更快的存儲管理有更多的請求。如果您真的想要大堆,請切換到64位JVM。我們?nèi)匀恍枰B續(xù)內(nèi)存,但在64位地址空間中獲得內(nèi)存要容易得多。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
極大值
在32位Java上可能的堆大?。?/trans> 1.8 GB
推薦
32位Java上的堆大小限制: 1.5GB
(或 1.8 GB
使用/3GB選項(xiàng))
添加回答
舉報(bào)