Clojure STM 内存不足

3
我有一个小程序,应该使用STM执行并行银行转账,所以我在不同的机器上进行测试,有2核和1核。在2核机器上一切正常,但在1核机器上,当我执行100万个并行事务时,会抛出Java内存溢出错误。
错误信息如下:"AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space 另外,我有一个Java同步版本的相同程序,它可以工作,即使速度较慢,也可以达到100万次交易。
我该怎么做才能让我的Clojure应用程序在1核机器上工作?我担心垃圾回收器无法处理这么多的Refs...你认为呢?
非常感谢您的帮助!
更新: 现在它已经可以工作了,我执行了java -Xmx1000m -jar myprog.jar,完美地运行了!
我不知道可以为JVM增加堆大小,这正是我的问题所在。 非常感谢“sw1nn”的好评论;)

4
你是否尝试过使用-Xmx选项来增加JVM的堆大小?对于32位JDK,你的限制大约为1500M,但64位则可以更高。如果你增加了限制后程序失败(但是在以后),那么很可能是由于内存泄漏导致的。但也有可能是1核机器需要更多的堆空间。 - sw1nn
太好了!我该如何在命令行中实现呢?你有相关链接吗?非常感谢! - nuvio
2
java -Xmx1500m -cp clojure-1.3.0.jar clojure.main -i myclojure.clj - sw1nn
太棒了!它现在正常工作了,我运行了 java -Xmx1000m -jar myprog.jar,完美地运行起来了!谢谢你!附注:你可以将这些作为答案写出来。 - nuvio
1个回答

2
您可以像以下这样在您的leiningen project.clj中添加jvm-opts:
:jvm-opts ["-Xmx1500m"]

要在Leiningen运行程序时指定它(例如测试),请进行以下操作:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接