首页 > 解决方案 > 如何提高 GroovyClassLoader.loadClass 的性能?

问题描述

我在我的 Java 项目中使用 Groovy 3.0.6 作为脚本语言,允许用户在运行时通过 groovy 脚本扩展应用程序。一些用户有数百个脚本片段。我GroovyClassLoader用来加载它们(也是CompileStatic,但这似乎影响可以忽略不计)。

我的问题是该parseClass方法非常慢(每个脚本的编译时间超过 1 秒)。这是编译一堆脚本的 JUnit 测试的分析器输出:

在此处输入图像描述 调用树。请注意,我让测试运行了 724 秒,而 groovy 花费了 87% 的时间进行编译。这让我觉得很奇怪,LexerATNSimulator.getReachableConfigSet花费了这么多时间……

Profiler 输出(热点) 测试运行的热点。不出所料,这里只有 groovy(和 java.util)。

GroovyClassLoader.parseClass(...)源代码作为常规提供给该方法String。我确实有一个自定义代码缓存,但是当有数百个要编译的片段时,单个脚本的编译会严重影响我的应用程序。

我能做些什么来减少编译时间吗?他们目前正在严重影响用户体验。

标签: javaperformancegroovyscriptingjvm

解决方案


推荐阅读