Я пытаюсь запустить симуляцию NetLogo (инфраструктура моделирования Java) в кластере как часть большой эксперимент. Я был удивлен кажущимся огромным требованием памяти для (относительно) простой симуляции. В кластере он выдает исключения «java.lang.OutOfMemoryError: пространство кучи Java» для всего, что меньше размера кучи «-Xmx2500M». Одно выполнение занимает 5 часов. Я провел один и тот же эксперимент на обоих своих компьютерах Mac (iMac и MacBook Pro), и они были выполнены менее чем за час, а «-Xmx1024» не дало ошибок. Для кластерных заданий требуется «-XX:MaxPermSize=250M», тогда как на моих компьютерах Mac не требуется увеличения выше значения по умолчанию. Я запускал один и тот же код, одни и те же входные данные, используя одни и те же банки во всех случаях.
В каждом случае используются 64-битные JVM (и, насколько я знаю, они очень похожи):
<on the cluster>
$ java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
<on my macs>
$ java -version
java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b04-415-10M3646)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01-415, mixed mode)
И я запускаю клиентскую JVM во всех случаях (изначально использовал сервер в кластере, переключение на клиент не имело значения). Я пробовал выполнять в кластере с java 7, такие же огромные проблемы с памятью и временем выполнения.
Я в полном недоумении, никто из тех, с кем я разговаривал, не может этого объяснить. Кто-нибудь там сталкивался с этим раньше? Любая помощь очень ценится!