我正致力于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并对其进行评估。 我想瓶颈在于脚本执行。解决问题的正确方法是什么?
答案 0 :(得分:0)
所以,我尝试了各种各样的事情
以下是“invokedynamic support”的初始指标
count = 83043
mean rate = 395.52 calls/second
1-minute rate = 555.30 calls/second
5-minute rate = 217.78 calls/second
15-minute rate = 82.92 calls/second
min = 0.29 milliseconds
max = 12.98 milliseconds
mean = 1.59 milliseconds
stddev = 1.08 milliseconds
median = 1.39 milliseconds
75% <= 2.46 milliseconds
95% <= 3.14 milliseconds
98% <= 3.44 milliseconds
99% <= 3.76 milliseconds
99.9% <= 12.19 milliseconds
以下是关闭ind的@CompileStatic指标。顺便说一下,如果打开“indy”,没有理由使用@CompileStatic。
count = 139724
mean rate = 8950.43 calls/second
1-minute rate = 2011.54 calls/second
5-minute rate = 426.96 calls/second
15-minute rate = 143.76 calls/second
min = 0.02 milliseconds
max = 24.18 milliseconds
mean = 0.08 milliseconds
stddev = 0.72 milliseconds
median = 0.06 milliseconds
75% <= 0.08 milliseconds
95% <= 0.11 milliseconds
98% <= 0.15 milliseconds
99% <= 0.20 milliseconds
99.9% <= 1.27 milliseconds