2009-12-10 59 views
8

我使用Out Of Memory help from sun's site。凡有引述如何模擬內存不足:請求的數組大小超過VM限制

Out Of Memory : Requested array size exceeds VM limit

This indicates that the application attempted to allocate an array that is larger than the heap size. For example, if an application tries to allocate an array of 512MB but the maximum heap size is 256MB, then this error will be thrown. In most cases the problem is likely to be either that the heap size is too small or that a bug results in the application attempting to create an array whose size is calculated to be incorrectly huge.

我試圖通過

import java.util.ArrayList; 
import java.util.List; 

public class JavaTest { 
    public static void main(String[] args){ 
     long[] ll = new long[64*1024*1024]; 
    } 
} 

我的機器上用

javac *.java;java -Xmx256m JavaTest 

但上面的線是生產

 
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
    at JavaTest.main(JavaTest.java:7) 

模擬這個是什麼我錯過了嗎?

更新: 我的Java版本是

 
$java -version 
java version "1.6.0_15" 
Java(TM) SE Runtime Environment (build 1.6.0_15-b03) 
Java HotSpot(TM) Server VM (build 14.1-b02, mixed mode) 

回答

18

對我來說

long[] l = new long[Integer.MAX_VALUE]; 

產生Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit

 

PS:如果你需要產生例外測試的目的,你也可以只throw new OutOfMemoryError("Requested array size exceeds VM limit")自己。

+1

謝謝。這也適用於我。但爲什麼我的代碼沒有工作得更早? – DKSRathore 2009-12-10 13:01:01

+0

好的。所以我的系統在1024 * 1024 * 1024-2到Integer.MAX_VALUE – DKSRathore 2009-12-10 13:10:32

+1

@Adrian的範圍內產生這個異常,我怎麼知道我的VM限制? – DKSRathore 2009-12-10 13:11:33

0

嘗試分配,比如說,一個ArrayList和它的大小運行時間增加一倍。

+1

這再次讓我象異常線程 「main」 java.lang.OutOfMemoryError:Java堆空間 \t在java.util.Arrays.copyOf(Arrays.java:2760) \t在java.util.Arrays.copyOf (Arrays.java:2734) \t在java.util.ArrayList.ensureCapacity(ArrayList.java:167) \t在java.util.ArrayList.add(ArrayList.java:351) \t在JavaTest.main(JavaTest。 java:27) – DKSRathore 2009-12-10 12:45:11

1

該數組被分配爲連續的堆空間,並且由於對象分配和垃圾收集,內存可能會碎片化。內存不足錯誤是由於缺乏分配數組的可用內存塊而導致的。您是否使用-Xmx標誌明確發送了JVM內存?

+0

是的,我做到了。 javac * .java; java -Xmx1000m JavaTest – DKSRathore 2009-12-10 12:42:39

0

只看人們的例子有問題,它似乎發生在人們使用java本地接口,C++應用程序之間的橋樑。

當運行純java應用程序時,標準程序似乎用於分配一個數組,計算所需的字節數是從數組傳遞的大小變量中減速拋出的一個java.lang.OutOfMemoryError: Java heap space異常。

當在JVM之外創建數組時,它看起來會產生另一個異常。我相信這種不同的行爲有一些技術上的原因。

您可以嘗試複製此人在此other forum上描述的問題。

+0

感謝您的回答。但論壇鏈接也沒有說明爲什麼會發生這種情況? VM限制錯誤更關心VM內存的本機內存嗎? – DKSRathore 2009-12-10 13:20:40

相關問題