簡體   English   中英

64位Windows上的32位JVM最大內存大小不如預期的大

[英]32-bit JVM maximum memory size on 64-bit Windows not as large as expected

我一直很難映射550MB的文件。 我知道32位JVM可以分配大約1.4G的最大內存,因此我需要按部分映射一個大文件。 但是,這是一個550MB的文件,但我仍然無法將其全部映射到內存中。 我能做的最好的是大約333MB的緩沖區大小。

下面是我的測試代碼:

void testMap() throws IOException{
    long buffer = 500000000; // CAUSES ERROR. best I can do is 350000000
    RandomAccessFile srcFile = new RandomAccessFile("550MBFile", "r");
    ByteBuffer srcbb = srcFile.getChannel().map(MapMode.READ_ONLY, 0, buffer);
}

錯誤如下:

Exception in thread "main" java.io.IOException: Map failed at sun.nio.ch.FileChannelImpl.map(Unknown Source) at TestSpliter.testMap(TestSpliter.java:22) at TestSpliter.main(TestSpliter.java:14) Caused by: java.lang.OutOfMemoryError: Map failed ...

JVM參數: -Xms1024m

誰能解釋為什么我只能使用1.4GB中的300MB? 謝謝。

請注意,這與那些詢問32位JVM的最大堆大小的問題不是重復的問題。

您的地址空間很可能是零散的,並且連續地址空間的可用空間不超過550MB。 如果需要存儲映射大文件,則需要時可以將它們分段映射。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM