我在java项目中使用groovy3.0.6作为脚本语言,允许用户通过groovy脚本在运行时扩展应用程序。有些用户有几百个脚本片段。我在用 GroovyClassLoader
加载它们(也 CompileStatic
,但这种影响似乎可以忽略不计)。
我的问题是 parseClass
方法非常慢(每个脚本的编译时间超过1秒)。下面是编译一组脚本的junit测试的探查器输出:
呼叫树。注意,我让测试运行了724秒,groovy消耗了87%的编译时间。我觉得很奇怪 LexerATNSimulator.getReachableConfigSet
耗费了那么多时间。。。
试运行的热点。不出所料,这里除了groovy(和java.util)什么都没有。
源代码提供给 GroovyClassLoader.parseClass(...)
方法作为常规 String
. 我确实有一个定制的代码缓存,但是当有数百个代码段需要编译时,单个脚本的编译会给我的应用程序带来很大的困难。
我能做些什么来减少编译时间吗?他们正在削弱目前的用户体验。
暂无答案!
目前还没有任何答案,快来回答吧!