2

我有一个简单的 java 应用程序,它获取 jmx 连接 url、对象名称和属性名称作为输入和输出属性值。此应用程序每分钟运行数百次,并具有严格的运行时间限制。最近出现了许多极端情况(将毫秒转换为秒、折叠列表等),重新编译和重新分发此应用程序变得乏味。所以我决定切换到一些支持 JMX 的脚本语言。

我尝试过 groovy、jython 和 clojure,发现它们的初始化时间很长(groovy/clojure/jython 大约为 0.9/1.2/3.5)。

有没有更快的初始化速度,或者有没有办法减少这些语言的初始化时间而不从java加载它们?

4

4 回答 4

2

现在,jark似乎是一个不错的解决方案。

写一个clojure脚本,比如

(ns jarkserver)

(require '[clojure.tools.nrepl :as nrepl])

(defn -main
[& args]
(nrepl/start-server 9000)
(.join (Thread/currentThread)))

从以下开始:

 lein run -m jarkserver

然后使用以下命令启动 REPL:

 jark repl

或使用以下命令运行您的 clojure 脚本:

 jark <path_to_clojure_script>

或者只是内联执行一些 clojure 代码:

 jark -e "(+ 1 1)"

编辑:启动 Jark 服务器的更简单方法是:

jark -cp lib/*:lib/dev/*:* -p 9000 server start  
于 2012-09-20T08:28:37.537 回答
2

我找到了一个适用于所有 java 脚本语言的解决方案,它是nailgun。它与其他答案中建议的 jerk 和 cake 具有相同的原理,但它运行任意 Java 类。

这篇博客文章对如何使用 nailgun 运行 jython 脚本进行了很好的说明,我相信它可以应用于其他脚本语言。

于 2012-10-20T13:14:02.370 回答
0

显然,对于 Clojure,Cake (https://github.com/flatland/cake) 包含一个 Clojure 脚本启动器,它使用在后台运行的已经初始化的 JVM。您必须自己查找详细信息,因为我从未使用过它,也不知道有关它的任何具体信息。但显然它大大缩短了启动时间。

于 2012-09-19T18:00:09.690 回答
0

其他选项(我不熟悉):

其他值得探索的途径(降低前景):

于 2020-08-10T20:20:22.973 回答