【发布时间】:2016-04-09 18:37:04
【问题描述】:
我正在研究 groovy 代码性能优化。我使用 jvisualvm 连接到正在运行的应用程序并收集 CPU 样本。示例表明 org.codehaus.groovy.reflection.CachedMethod.inkove 占用的 CPU 时间最多。我在示例中没有看到任何其他应用方法。
深入研究 CachedMethod.invoke 并了解哪些代码行真正会导致性能损失的正确方法是什么?
谢谢。
UPD: 我确实使用 Indy,但对我没有帮助。
我没有尝试引入 @CompileStatic,因为我想在将 groovy 重写为 java 之前找到我的瓶颈。
我的问题有点类似于这个帖子:Call site caching faster than invokedynamic?
我有一个动态编写 groovy 脚本的代码。脚本模板看起来是这样的:
def evaluateExpression(Map context){
def user = context.user
%s
}
其中 %s 替换为
user.attr1 == '1' || user.attr2 == '2' || user.attr3 = '3'
从数据库中获取了一组(总共 20 个)替换项。 代码从 DB 获取替换,创建 GroovyScript 并评估它。 我想瓶颈在于脚本执行。什么是正确的解决方法?
【问题讨论】:
-
你在使用 Indy 神器吗?
-
嗨,在提交问题后确实用 Indy 替换了默认的 groovy。根据 newrelic 指标,不能说它有很大帮助。现在顶级 CPU 使用者是 org.codehaus.groovy.vmplugin.v7.Selector$MethodSelector.doCallSiteTargetSet 我假设我确实成功地切换到了 InvokeDynamic。我现在应该如何处理 Selector$MethodSelector.doCallSiteTargetSet :) ?
-
@CompileStatic 怎么样?
-
我想避免随机重写代码以使其成为 @CompileStatic。我想在做一些严肃的事情之前找到瓶颈......
标签: performance groovy cpu invokedynamic