java - 如何提高 GroovyClassLoader.loadClass 的性能?
问题描述
我在我的 Java 项目中使用 Groovy 3.0.6 作为脚本语言,允许用户在运行时通过 groovy 脚本扩展应用程序。一些用户有数百个脚本片段。我GroovyClassLoader
用来加载它们(也是CompileStatic
,但这似乎影响可以忽略不计)。
我的问题是该parseClass
方法非常慢(每个脚本的编译时间超过 1 秒)。这是编译一堆脚本的 JUnit 测试的分析器输出:
调用树。请注意,我让测试运行了 724 秒,而 groovy 花费了 87% 的时间进行编译。这让我觉得很奇怪,LexerATNSimulator.getReachableConfigSet
花费了这么多时间……
测试运行的热点。不出所料,这里只有 groovy(和 java.util)。
GroovyClassLoader.parseClass(...)
源代码作为常规提供给该方法String
。我确实有一个自定义代码缓存,但是当有数百个要编译的片段时,单个脚本的编译会严重影响我的应用程序。
我能做些什么来减少编译时间吗?他们目前正在严重影响用户体验。
解决方案
推荐阅读
- node.js - 想用 Nodejs 每 N 秒发出一次“X Post”请求(我正在使用 facebook 聊天机器人,所以我想每秒发出 250 个 Post 请求)
- reactjs - 为什么即使更新了商店,redux mapStateToProps 也不更新组件道具?
- javascript - 表单提交后如何保持选定的日期?
- python - 用背景颜色标记 x 范围
- android - Android:constraintLayout 在 CardView 中不起作用
- python-3.x - 如何在 Python 中将浮点数格式化为可变宽度
- c++ - 如何在单个向量中找到匹配的元素
- python - 打印输出时加负号
- django - 路由器和视图集如何配置它们的 url?
- spring-boot - Spring Boot + Spring Rabbit MQ:通过 https 安全层连接