我有一个简单的java应用程序,它获取jmx连接url,对象名称和属性名称作为输入和输出属性值。该应用程序每分钟运行数百次,并且具有严格的运行时间限制。最近出现了许多极端情况(将毫秒转换为秒,折叠列表等)并重新编译和重新分发此应用程序变得乏味。 所以我决定转而使用一些支持JMX的脚本语言。
我尝试过groovy,jython和clojure,发现他们的初始化时间很长(groovy / clojure / jython大约为0.9 / 1.2 / 3.5)。
有没有更快的初始化速度,或者有没有办法减少这些laguages的初始化时间而不从java加载它们?
答案 0 :(得分: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
答案 1 :(得分:2)
我找到了一个适用于所有java脚本语言的解决方案nailgun。 它与其他答案中建议的jerk和cake具有相同的原则,但它运行的是任意java类。
This博客文章对如何使用nailgun运行jython脚本有很好的指导,我相信它可以应用于其他脚本语言。
答案 2 :(得分:0)
显然,Clojure的Cake(https://github.com/flatland/cake)包含一个Clojure脚本启动程序,它使用在后台运行的已经初始化的JVM。你必须自己查阅细节,因为我从来没有使用它,也不知道任何具体的细节。但显然它会缩短启动时间。
答案 3 :(得分:0)
其他选项(我不熟悉):
其他值得探索的途径(降低前途):