So simulieren Sie den Out of Memory: Die angeforderte Array-Größe überschreitet das VM-Limit

8

Ich habe die Unterstützung für nicht genügend Speicher von der Sun-Website verwendet. Wo es als

zitiert wird
  

Nicht genügend Arbeitsspeicher: Die angeforderte Array-Größe überschreitet das VM-Limit

     

Dies zeigt an, dass die Anwendung versucht hat, ein Array zuzuweisen, das größer als die Heap-Größe ist. Zum   Beispiel: Wenn eine Anwendung versucht, ein Array von 512 MB zuzuordnen, die maximale Größe des Heapspeichers jedoch 256 MB beträgt,   dann wird dieser Fehler ausgelöst. In den meisten Fällen ist das Problem wahrscheinlich, dass auch die Größe des Heapspeichers zutrifft   klein oder dass ein Fehler dazu führt, dass die Anwendung versucht, ein Array zu erstellen, dessen Größe berechnet wird   falsch groß sein.

Ich habe versucht, dies durch

zu simulieren %Vor%

auf meinem Rechner mit

%Vor%

Aber die obige Zeile produziert

%Vor%

Was vermisse ich?

Aktualisierung: Meine Java-Version ist

%Vor%     
DKSRathore 10.12.2009, 12:32
quelle

4 Antworten

18

Für mich

%Vor%

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

PS: Wenn Sie die Ausnahme für Testzwecke erstellen müssen, können Sie auch throw new OutOfMemoryError("Requested array size exceeds VM limit") selbst eingeben.

    
akuhn 10.12.2009, 12:58
quelle
1

Das Array wird als kontinuierlicher Heapspeicherplatz zugewiesen, und der Speicher kann aufgrund der Objektzuordnung und der Speicherbereinigung fragmentiert werden. Der Speichermangelfehler tritt aufgrund des Fehlens eines festen Speicherblocks auf, um das Array zuzuweisen. Haben Sie den JVM-Speicher explizit mit dem Flag -Xmx gesendet?

    
whatnick 10.12.2009 12:39
quelle
0

Versuchen Sie, z. B. eine ArrayList zuzuordnen und die Laufzeit der Größe zu verdoppeln.

    
lorenzog 10.12.2009 12:38
quelle
0

Betrachtet man nur das Beispiel für Leute, die das Problem haben, scheint es aufzutreten, wenn Leute die java-native Schnittstelle benutzen, Brücke zwischen C ++ Anwendungen.

Beim Ausführen der Pure-Java-Anwendung werden bei der Standardprozedur für die Zuweisung eines Arrays die Bytes berechnet, die von der Größenvariable in der Array-Verzögerung benötigt werden, wobei eine java.lang.OutOfMemoryError: Java heap space -Ausnahme ausgelöst wird.

Wenn das Array außerhalb der JVM erstellt wird, sieht es so aus, als würde es diese andere Ausnahme generieren. Ich bin mir sicher, dass es für dieses unterschiedliche Verhalten einen technischen Grund gibt.

Sie könnten versuchen, das Problem zu reproduzieren, das diese Person in diesem anderen Forum beschreibt .

    
Gordon 10.12.2009 13:12
quelle

Tags und Links