У меня проблема с запуском Groovy на одном из моих Linux-компьютеров - для выполнения очень простой команды требуется около 30 секунд:

groovy -e ""

если я запускаю strace на нем, вот что я вижу, где он останавливается и ждет:

mprotect(0x7fae284e0000, 4096, PROT_NONE) = 0
clone(child_stack=0x7fae285dfff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7fae285e09d0, tls=0x7fae285e0700, child_tidptr=0x7fae285e09d0) = 62660
futex(0x7fae285e09d0, FUTEX_WAIT, 62660, NULL <unfinished ...>

Есть ли способ выяснить, чего он ждет и почему и как это исправить?

Я использую Red Hat 6.3, Groovy Версия: 2.2.1 JVM: 1.7.0_25 Поставщик: Oracle Corporation ОС: Linux

И вот команда времени:

bin $ time groovy -e ""

реальный 0m22.255s пользователь 0m26.875s sys 0m2.064s

1 ответ1

0

Причина очень длительного времени запуска groovy (по сравнению с другими интерпретируемыми языками) заключается в том, что он должен запускать JVM для каждой команды groovy .

Возможно, вы захотите заглянуть в GroovyServ. При первом запуске вы запускаете демон с JVM в фоновом режиме. Последующие вызовы groovyclient затем используют эту JVM. Он обещает быть "в 10-20 раз быстрее, чем обычный Groovy".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .