当我在我的一台 Linux 机器上启动 Groovy 时遇到一个问题 —— 执行非常简单的命令大约需要 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$ 时间 groovy -e“”
实际 0m22.255s 用户 0m26.875s 系统 0m2.064s
答案1
groovy 启动时间非常长(与其他解释型语言相比)的原因在于它必须为每个groovy
命令启动一个 JVM。
你可能想看看Groovy服务。它的作用是首次启动时在后台运行带有 JVM 的守护进程。随后的调用将groovyclient
改用此 JVM。它承诺“比常规 Groovy 快 10 到 20 倍”。