Clojure STM не хватает памяти

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

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

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

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

Спасибо большое за вашу помощь!

Обновление: теперь все работает, я сделал java -Xmx1000m -jar myprog.jar и все заработало отлично!

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


person nuvio    schedule 04.04.2012    source источник
comment
Вы пытались увеличить размер кучи для JVM с параметрами -Xmx? Для 32-битного JDK вы ограничены примерно 1500 МБ, но можете увеличить его с 64-битным. Если вы увеличиваете лимит и программа дает сбой (но позже), у вас, вероятно, есть утечка памяти. Но возможно, вам просто нужно немного больше кучи на 1-ядерной машине.   -  person sw1nn    schedule 05.04.2012
comment
О, круто! Как я могу это сделать из командной строки? У вас есть ссылка? Большое спасибо!   -  person nuvio    schedule 05.04.2012
comment
java -Xmx1500m -cp clojure-1.3.0.jar clojure.main -i myclojure.clj   -  person sw1nn    schedule 05.04.2012
comment
Удивительный! теперь это работает, я сделал java -Xmx1000m -jar myprog.jar и работал отлично! Спасибо!! P.S. Вы могли бы написать это как ответ...   -  person nuvio    schedule 05.04.2012


Ответы (1)


Вы также можете добавить jvm-opts в ваш leiningen project.clj, как показано ниже:

:jvm-opts ["-Xmx1500m"]

чтобы указать его, когда вы запускаете свою программу в лейнингене (например, тестирование)

person ktsujister    schedule 13.03.2013