2012-04-04 8 views
3

私は、STMを使用して並列バンキング転送を実行する小さなプログラムを持っているので、別のマシン、2コアと1コアでテストしています。 2コアマシンではすべて動作しますが、1コアマシンでは、100万並列トランザクションを実行するとJava Out of Memoryエラーがスローされます。Clojure STMメモリ不足

エラーは、以下の「AWT-EventQueueの-0」java.lang.OutOfMemoryErrorをです:Javaヒープスペース

また、私は、それが遅い場合でも、働く同じプログラムのJavaを同期バージョンを持っていますそれは百万回の取引に達することができます。

Clojureアプリケーションを1コアマシンで動作させるにはどうすればよいですか?私はガベージコレクターが非常に多くのRefsを扱うことができないのではないかと思います...あなたはどう思いますか?

ありがとうございました!

更新: それが機能するようになりました、私はjava -Xmx1000m -jar myprog.jarを行なったし、完全に働きました!

JVMのヒープサイズを増やすことができないことがわかりましたが、それはまさに私の問題でした。偉大なコメントのためにたくさんの「sw1nn」 おかげで、あなたはまた、以下のようなあなたのLeiningenをするproject.cljにJVMが-付き合え追加することができます)

+4

-Xmxオプションを使ってJVMのヒープサイズを増やしてみましたか? 32ビットJDKでは、約1500Mに制限されていますが、64ビットではるかに高い可能性があります。制限を大きくしてプログラムが失敗すると(後で)、メモリリークが発生する可能性があります。しかし、1コアマシンでもっと多くのヒープを必要とする可能性があります。 – sw1nn

+0

すごい!コマンドラインから実際にどうすればいいですか?リンクはありますか?どうもありがとう! – nuvio

+2

java -Xmx1500m -cp clojure-1.3.0.jar clojure.main -i myclojure.clj – sw1nn

答えて

2

:あなたはあなたのプログラムを実行すると

:jvm-opts ["-Xmx1500m"] 

それを得るためには、指定しました(テストのような)