锁定老帖子 主题:今天做了个小实验,关于Groovy性能
精华帖 (0) :: 良好帖 (9) :: 新手帖 (0) :: 隐藏帖 (10)
|
|
---|---|
作者 | 正文 |
发表时间:2008-01-04
for(int x= 1;x<10000;x++) {
for(int y=1;y<1000;y++) { 我这么写,在Java里得到的数是6.....的。还是你代码错了。 其实我到底反对你哪里你也没搞明白。我主要反对的是你用这种方法做性能测试。用读取时间整型相减的方法测试是不科学的。像这种相差太大的测试,结论虽然不会错,但是得到的数据误差实在太大。我也说了,我做的时候,误差到了秒一级。 如果是在工作中,比较同一语言的两种算法的话,这种性能测试根本无法分辨性能差距。 我主要说的是这个问题。你虽然没有误导新手的意思,但是你的测试数据确实有肯能产生这种事情。所以说,性能测试不是随便写几个代码就出来的。 |
|
返回顶楼 | |
发表时间:2008-01-04
下面是我今天上午用p-unit性能测试引擎做的测试。测试结果应该是比较精确的。还是我那台机器,测试了四次。groovy是用groovyc编译成Java代码测试的。
Goo.groovy int i=0 for (int x in 1..10000) { for (int y in 1..1000) { i+=y } } Joo.java public class Joo { public void begin() { int i = 0; for (int x = 1;x <= 10000;x++) { for (int y = 1;y <= 1000;y++) { i = i + y; } } } } TestClass.test import groovy.lang.Script; import org.punit.runner.SoloRunner; public class TestClass { public void testGoo() { Script g = new Goo(); g.run(); } public void testJoo(){ Joo j = new Joo(); j.begin(); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub new SoloRunner().run(TestClass.class); } } 下面是测试结果。 [solo] Starting TestClass TestClass testGoo() - [11809.302021ms] testJoo() - [24.416232ms] total: 2, failures:0 (GREEN) - 11868.730802ms [solo] Starting TestClass TestClass testGoo() - [11783.037229ms] testJoo() - [22.409552ms] total: 2, failures:0 (GREEN) - 11840.076323ms [solo] Starting TestClass TestClass testGoo() - [11668.793659ms] testJoo() - [22.272384ms] total: 2, failures:0 (GREEN) - 11727.853121ms [solo] Starting TestClass TestClass testGoo() - [11584.613966ms] testJoo() - [22.87693ms] total: 2, failures:0 (GREEN) - 11643.096818ms 你可以看到两者的执行时间。testGoo测试的是groovy,testJoo测试的是Java。 |
|
返回顶楼 | |
发表时间:2008-01-10
groovy的简单值处理有待提高.至少需要到达rails这种程度.
不过数值运算就不需要用groovy来搞了吧. 有哪位可以检测一下其他方面得东东,譬如函数调用的性能. |
|
返回顶楼 | |
发表时间:2008-01-10
看两位在争吵,我唯一的收获就是知道了还有p-unit这东西。
谢谢, 一般我在性能测试的时候也是用System.currentTimeMillis()来做的。 我觉得误差问题也不会太大。 Groovy在数值计算上的速度确实太低了,JavaScript要远远比它快。 不过这样猛烈的数值计算一般用不到,还好,呵呵。 |
|
返回顶楼 | |
发表时间:2008-01-11
tedeyang 写道 看两位在争吵,我唯一的收获就是知道了还有p-unit这东西。
谢谢, 一般我在性能测试的时候也是用System.currentTimeMillis()来做的。 我觉得误差问题也不会太大。 Groovy在数值计算上的速度确实太低了,JavaScript要远远比它快。 不过这样猛烈的数值计算一般用不到,还好,呵呵。 我和这位老兄一样.知道了p-unit这么好玩好用的一个东西.哈哈 |
|
返回顶楼 | |
发表时间:2008-01-11
http://www.nabble.com/groovy-is-slow-to14502299.html
|
|
返回顶楼 | |
发表时间:2008-01-12
其实我最初是看到他的测试不太科学,说让他看看Grails网站做的Grails和rails的对比测试。虽然是Grails自己做的,但是既然敢放出来,那么就多少有些可信。结果被骂了(那个帖子已经被删了),就在自己的机器上重复了他的测试。以此证明他的测试误差比较大,如果用来做严谨的性能测试,无法得到正确结果。而且选择的测试用例也不太合适。结果他反以为我要证明Groovy和Java速度一样。结果就这么吵了下来。
|
|
返回顶楼 | |
发表时间:2008-01-13
对“拿int的计算来证明语言的计算能力”这种行为表示质疑。
|
|
返回顶楼 | |
发表时间:2008-05-08
测试了一下各种循环,发现for in是最快的。
|
|
返回顶楼 | |