Ich habe ein kleines Programm, das mit dem STM parallel Banking-Transfer durchführen sollte, also teste ich es auf verschiedenen Maschinen, 2-Core und 1-Core. In den 2-Kern-Maschinen funktioniert alles, aber in der 1-Kern-Maschine wird der Java Out of Memory-Fehler ausgelöst, wenn ich 1 Million parallele Transaktionen durchführe.Clojure STM nicht genügend Arbeitsspeicher
Der Fehler ist der folgende „AWT-Eventqueue-0“ java.lang.OutOfMemoryError: Java Heap-Speicher
Auch habe ich eine Java-synchronize Version des gleichen Programms, das funktioniert, auch wenn es langsamer ist, es kann eine Million Transaktionen erreichen.
Was kann ich tun, damit meine Clojure-Anwendung in der 1-Kern-Maschine funktioniert? Ich fürchte, der Müllsammler kann nicht mit so vielen Refs umgehen ... was denkst du?
Vielen Dank für Ihre Hilfe!
Update: Es funktioniert jetzt, ich tat java -Xmx1000m -jar myprog.jar
und arbeitete perfekt!
Ich wusste nicht, dass es möglich war, die Heap-Größe für die JVM zu erhöhen, und das war genau mein Problem. Vielen Dank an „sw1nn“ für den großen Kommentar;)
Haben Sie versucht, die Heap-Größe für die JVM mit den Optionen -Xmx zu erhöhen? Für 32-Bit-JDK sind Sie auf etwa 1500M beschränkt, können aber mit 64-Bit viel höher gehen. Wenn Sie das Limit erhöhen und das Programm fehlschlägt (aber später), haben Sie wahrscheinlich ein Speicherleck. Aber es ist möglich, dass Sie nur ein bisschen mehr Heap auf dem 1-Core-Rechner benötigen. – sw1nn
Oh großartig! Wie kann ich das von der Befehlszeile aus tun? Hast du einen Link? Danke vielmals! – nuvio
java -Xmx1500m -cp clojure-1.3.0.jar clojure.main -i myclojure.clj – sw1nn