Speicher konnte nicht reserviert werden, obwohl Platz vorhanden ist

1

Ich versuche, Weka ( http://www.cs.waikato.ac.nz/ml/weka/ ) auf einem 64-Bit-Windows 7-System zu verwenden, das von Natur aus sehr speichergebunden ist. Problem ist, dass mein PC 8 GB RAM hat und mein Task-Manager sagt, dass nur 1,5 zugewiesen sind. Selbst wenn ich versuche, Weka auszuführen, das angeblich nur 3 dieser GB verwenden würde, schlägt dies mit dem folgenden Fehler fehl:

Error occurred during initialization of VM
Could not reserve enough space for 3072000KB object heap

Ideen?

lucasnadalutti
quelle
Laufen Sie unter 32- oder 64-Bit-Windows 7?
AFH
32 bit, sorry will edit
lucasnadalutti
Das ist ein Teil Ihres Problems: Nur 4 GB Ihres Speichers sind adressierbar.
AFH
Es tut mir leid, dass ich das noch einmal überprüfen musste, es ist tatsächlich 64. Tut mir leid, mein schlechtes
lucasnadalutti
Die Fehlermeldung gibt an, dass der Objektheap 300 MB benötigt: Woher stammt Ihre 3 GB-Anforderung?
AFH

Antworten:

4

Bei der Initialisierung der VM ist ein Fehler aufgetreten

Es konnte nicht genügend Speicherplatz für den 3072000 KB großen Objektheap reserviert werden

Sie müssen die maximale Heap-Größe der JVM erhöhen .

Versuchen:

java -Xmx4g ...

Hinweis:

  • Sie müssen auch sicherstellen, dass eine 64-Bit-Version der JVM installiert ist.

OutOfMemoryException

Die meisten virtuellen Java-Maschinen weisen nur eine bestimmte maximale Speicherkapazität zum Ausführen von Java-Programmen zu. Normalerweise ist dies viel weniger als die Größe des Arbeitsspeichers in Ihrem Computer. Sie können jedoch den für die virtuelle Maschine verfügbaren Speicher erweitern, indem Sie die entsprechenden Optionen festlegen. Mit Suns JDK können Sie zum Beispiel verwenden

java -Xmx512m ...

um die maximale Größe des Java-Heapspeichers auf 512 MB festzulegen. Sie können -Xmx2ges mit auf 2 GB einstellen.

Weitere Informationen zu diesen Optionen finden Sie unter diesem Link .

Hinweis:

Verwenden Sie den -XmsParameter nicht mit , da dies schnell zu einer OutOfMemoryException führt.

Wenn Sie WEKA unter Windows verwenden und WEKA über das Startmenü starten, lesen Sie den Abschnitt " Aufruf " im Artikel " Java Virtual Machine ". Dort wird erläutert, welche Dateien Sie bearbeiten müssen, um WEKA mehr Speicherplatz zu bieten (RunWEKA.bat oder RunWEKA.ini) (abhängig von Ihrer Version).

Beachten Sie jedoch, dass Ihre Hardwarearchitektur und / oder Ihr Betriebssystem die Menge des verfügbaren Arbeitsspeichers einschränken (siehe die Abschnitte 32-Bit und 64-Bit im Artikel zur Java Virtual Machine).

Source OutOfMemoryException


Kann ich überprüfen, wie viel Speicher für WEKA verfügbar ist?

Sie können leicht überprüfen, wie viel Speicher WEKA verwenden kann (dies hängt von der maximalen Größe des Heapspeichers ab, mit dem die Java Virtual Machine gestartet wurde).

  1. Entwicklerversion
    • Starten Sie die SimpleCLI
    • Führen Sie den folgenden Befehl aus:
    • java weka.core.SystemInfo
    • Die Eigenschaft memory.max listet die maximale Speichergröße auf, die WEKA zur Verfügung steht
  2. Buchversion (und Entwicklerversion)
    • Starten Sie den Explorer
    • Klicken Sie mit der rechten Maustaste in das Protokollfenster
    • Wählen Sie Speicherinformationen, um die Informationen in das Protokoll auszugeben

Falls Sie auf eine OutOfMemoryException stoßen, müssen Sie die maximale Größe des Heapspeichers erhöhen. Wie viel Sie zuweisen können, hängt stark vom Betriebssystem und der zugrunde liegenden Hardware ab (siehe Abschnitte 32-Bit und 64-Bit des Artikels über Java Virtual Machine ). Schauen Sie sich auch den Abschnitt OutOfMemoryException weiter unten an.

Quelle Kann ich überprüfen, wie viel Speicher für WEKA verfügbar ist?


Weitere Lektüre

DavidPostill
quelle
1
Beachten Sie, dass es sich um physischen Arbeitsspeicher handelt , wenn der Task-Manager "Mein PC hat 8 GB RAM und mein Task-Manager sagt, dass nur 1,5 zugewiesen sind" . Wenn sich die Java-VM über die Zuweisung von Speicherplatz beschwert, spricht man von virtuellem Speicher. Sie können natürlich viel mehr virtuellen Speicher verwenden, als Sie über RAM verfügen. Um jedoch zu verhindern, dass Ihr gesamtes Commit-Limit mit vorab zugewiesenem Heap aufgebraucht wird, den Ihre bestimmte Java-App möglicherweise nicht verwendet, hat die Java-VM ein Standardlimit für die Art und Weise viel wird es zuteilen.
Jamie Hanrahan