Wie simulieren die Out-Of-memory : Requested array size exceeds VM limit
Benutzte ich die Out Of Memory Hilfe von sun ' s Website. Wo es zitiert
Out Of Memory : Requested array size exceeds VM limit
Bedeutet dies, dass die Anwendung versucht, Zuweisung eines array, das größer ist als der heap-Größe. Für
Beispiel, wenn eine Anwendung versucht, reservieren Sie ein array von 512 MB, aber die maximale heap-Größe 256 MB
dann ist dieser Fehler wird geworfen. In den meisten Fällen das problem wird wahrscheinlich sein, dass der heap-Größe ist zu
klein ist, oder dass ein bug der Ergebnisse in die Anwendung, die Sie versuchen, zu erstellen ein array, dessen Größe berechnet sich zu
falsch riesige.
Habe ich versucht, um dies zu simulieren, indem
import java.util.ArrayList;
import java.util.List;
public class JavaTest {
public static void main(String[] args){
long[] ll = new long[64*1024*1024];
}
}
auf meinem Rechner mit
javac *.java;java -Xmx256m JavaTest
Aber die Zeile oben ist die Herstellung von
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space bei JavaTest.main(JavaTest.java:7)
Was bin ich?
Update :
Meine java version ist
$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)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für mich
Erträge
Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit
PS: wenn Sie brauchen, um zu produzieren, die Ausnahme für den Zweck der Prüfung, Sie könnten auch einfach
throw new OutOfMemoryError("Requested array size exceeds VM limit")
selbst.Integer.MAX_VALUE
sollte eine sichere Schätzung für den test (ich nehme an, Sie brauchen, um zu provozieren, die für einen test), aint it? (wenn Sie Tatsächlich benötigen, es zu testen, könnten Sie werfen der Ausnahme selbst, nicht wahr?)Array zugeordnet wird, die als eine kontinuierliche heap-Speicher und Speicher können fragmentiert erhalten durch Objekt allocaion und garbage collection. Die out-of-memory-Fehler tritt auf, aufgrund des Fehlens von einer massiven block Speicher reservieren array. Hast du geschickt den JVM-Speicher explizit mit -Xmx-flag ?
Versuchen Zuweisung von, sagen wir, eine ArrayList und auf die doppelte Größe Laufzeit.
Gerade auf der Suche am Beispiel fo Leute das problem haben, es scheint zu geschehen, wenn Menschen mit dem java native interface, Brücke zwischen C++ - Anwendungen.
Beim laufen Reine java-Anwendung, die standard-Verfahren scheint für die Zuweisung eines array ist die Berechnung der bytes, die benötigt wird von der Größe der variable im array übergebenen Verzögerung auslösen einer
java.lang.OutOfMemoryError: Java heap space
Ausnahme.Wenn das array erstellt wird, die außerhalb des JVM-so sieht es aus es generiert diese andere Ausnahme. Ich bin sicher, es gibt einige technische Grund für dieses unterschiedliche Verhalten.
Könnten Sie versuchen, zu replizieren, das problem auf diese person beschreibt auf dieser anderen forum.