2012-04-04 9 views
3

STM을 사용하여 병렬 뱅킹 전송을 수행해야하는 작은 프로그램이 있으므로 다른 시스템 인 2 코어 및 1 코어에서 테스트 할 예정입니다. 2 코어 머신에서는 모든 것이 작동하지만 1 코어 머신에서는 1 백만 병렬 트랜잭션을 수행 할 때 Java Out of Memory 오류가 발생합니다. 자바 힙 공간 또한Clojure STM 메모리 부족

나는 그것이 느린 경우에도 작동 같은 프로그램의 자바 동기화 버전 :

오류는 다음과 같은 "AWT-EventQueue의-0"java.lang.OutOfMemoryError와이다 그것은 백만 건의 거래에 도달 할 수 있습니다.

Clojure 응용 프로그램을 1 코어 시스템에서 작동 시키려면 어떻게해야합니까? 가비지 컬렉터가 너무 많은 Refs를 처리 할 수 ​​없다는 것이 두렵다 ... 어떻게 생각하니?

도움을 주셔서 감사합니다.

업데이트 : 지금 작동합니다. 저는 java -Xmx1000m -jar myprog.jar을 완성했으며 완벽하게 작동했습니다.

JVM의 힙 크기를 늘릴 수 있다는 것을 몰랐습니다. 이것이 바로 제 문제였습니다. 덕분에 많은 위대한 코멘트 "sw1nn"에)

+4

-Xmx 옵션을 사용하여 JVM의 힙 크기를 늘려 보았습니까? 32 비트 JDK의 경우 약 1,500 만 개로 제한되지만 64 비트를 사용하면 훨씬 높아질 수 있습니다. 제한을 늘리고 프로그램이 실패하면 (나중에는) 메모리 누수가 발생할 가능성이 높습니다. 그러나 1 코어 머신에서 좀 더 많은 힙이 필요할 수도 있습니다. – sw1nn

+0

대단해! 커맨드 라인에서 실제로 어떻게 할 수 있습니까? 링크가 있습니까? 고마워요! – nuvio

+2

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

답변

2

또한 추가 할 수 있습니다 아래처럼 leiningen의 project.clj에 JVM이-의 opts : 당신이 당신의 프로그램을 실행할 때 지정된 얻기 위해

:jvm-opts ["-Xmx1500m"] 

(테스트와 같이)