在使用不同的排序算法时,我很惊讶Groovy关闭的表现非常糟糕.到目前为止我找不到一个好的答案,所以现在试试我的运气;)为什么Groovy闭包比传统方法慢得多? 这是一个显示性能差异的简
这是一个显示性能差异的简单示例.它创建两个带有随机数的列表,并按相反的顺序对它们进行排序,测量排序时间.在我的机器和10k元素上,使用闭包需要270ms,使用Comparator实现只需50ms.
根据随机数的分布,时间稍有不同.我也尝试了Groovy 1.7.4和1.8.0,后者的性能稍好一些.但整体情况保持不变:关闭表现不佳.
我该怎么做才能提高闭合性能?当然除了不使用闭包;)
我是否遗漏了某些内容,或者如果性能有问题,是否应该在groovy中使用闭包?
def numberCount = 10000 def random = new Random() def unorderedList1 = (1..numberCount).collect{random.nextInt()} def unorderedList2 = (1..numberCount).collect{random.nextInt()} def timeit = {String message, Closure cl-> def startTime = System.currentTimeMillis() cl() def deltaTime = System.currentTimeMillis() - startTime println "$message: \ttime: $deltaTime" } timeit("compare using closure") { def comparator= [ compare: { a,b -> return b <=> a }] as Comparator unorderedList1.sort(comparator) } timeit("compare using method") { Comparator comparator = new MyComparator() unorderedList2.sort(comparator) } class MyComparator implements Comparator { int compare(a, b) {return b <=> a} }
What can I do to improve closure performance?
等待. JDK7将添加一条称为invokeDynamic的新指令,该指令有望从根本上提高JVM上动态语言的性能.