![](/img/trans.png)
[英]Maximum heap size for JVM on a 32-bit and 64-bit windows server
[英]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.