2012-04-04 2 views
3

У меня есть небольшая программа, которая должна выполнять параллельную банковскую передачу с использованием STM, поэтому я тестирую ее на разных машинах, двухъядерных и одноядерных. В двухъядерных машинах все работает, но в 1-ядерной машине ошибка Java Out of Memory возникает, когда я выполняю 1 миллион параллельных транзакций.Clojure STM Out of Memory

Ошибка заключается в следующем «АВТ-EventQueue-0» java.lang.OutOfMemoryError: Java куча пространство

Также у меня есть версия Java-Синхронизировать ту же программу, которая работает, даже если это происходит медленнее, он может достичь миллиона транзакций.

Что я могу сделать, чтобы приложение Clojure работало в 1-ядерном компьютере? Я боюсь, что сборщик мусора не может обработать так много Refs ... как вы думаете?

Большое спасибо за помощь!

Обновление: Сейчас он работает java -Xmx1000m -jar myprog.jar и отлично работает!

Я не знал, что можно увеличить размер кучи для JVM, и это была моя проблема. большое спасибо «sw1nn» за большой комментарий;)

+4

Вы пытались увеличить размер кучи для JVM с параметрами -Xmx? Для 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-выбирает на свой Leiningen project.clj, как показано ниже:

:jvm-opts ["-Xmx1500m"] 

, чтобы получить это указано при запуске программы в leiningen. (например, тестирование)