论坛首页 Java企业应用论坛

今天做了个小实验,关于Groovy性能

浏览 11299 次
精华帖 (0) :: 良好帖 (9) :: 新手帖 (0) :: 隐藏帖 (10)
作者 正文
   发表时间:2008-01-04  
for(int x= 1;x<10000;x++) {
for(int y=1;y<1000;y++) {
我这么写,在Java里得到的数是6.....的。还是你代码错了。
其实我到底反对你哪里你也没搞明白。我主要反对的是你用这种方法做性能测试。用读取时间整型相减的方法测试是不科学的。像这种相差太大的测试,结论虽然不会错,但是得到的数据误差实在太大。我也说了,我做的时候,误差到了秒一级。
如果是在工作中,比较同一语言的两种算法的话,这种性能测试根本无法分辨性能差距。
我主要说的是这个问题。你虽然没有误导新手的意思,但是你的测试数据确实有肯能产生这种事情。所以说,性能测试不是随便写几个代码就出来的。
0 请登录后投票
   发表时间: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。
0 请登录后投票
   发表时间:2008-01-10  
groovy的简单值处理有待提高.至少需要到达rails这种程度.
不过数值运算就不需要用groovy来搞了吧.
有哪位可以检测一下其他方面得东东,譬如函数调用的性能.
0 请登录后投票
   发表时间:2008-01-10  
看两位在争吵,我唯一的收获就是知道了还有p-unit这东西。
谢谢,
一般我在性能测试的时候也是用System.currentTimeMillis()来做的。
我觉得误差问题也不会太大。

Groovy在数值计算上的速度确实太低了,JavaScript要远远比它快。
不过这样猛烈的数值计算一般用不到,还好,呵呵。
0 请登录后投票
   发表时间:2008-01-11  
tedeyang 写道
看两位在争吵,我唯一的收获就是知道了还有p-unit这东西。
谢谢,
一般我在性能测试的时候也是用System.currentTimeMillis()来做的。
我觉得误差问题也不会太大。

Groovy在数值计算上的速度确实太低了,JavaScript要远远比它快。
不过这样猛烈的数值计算一般用不到,还好,呵呵。


我和这位老兄一样.知道了p-unit这么好玩好用的一个东西.哈哈
0 请登录后投票
   发表时间:2008-01-11  
http://www.nabble.com/groovy-is-slow-to14502299.html
0 请登录后投票
   发表时间:2008-01-12  
其实我最初是看到他的测试不太科学,说让他看看Grails网站做的Grails和rails的对比测试。虽然是Grails自己做的,但是既然敢放出来,那么就多少有些可信。结果被骂了(那个帖子已经被删了),就在自己的机器上重复了他的测试。以此证明他的测试误差比较大,如果用来做严谨的性能测试,无法得到正确结果。而且选择的测试用例也不太合适。结果他反以为我要证明Groovy和Java速度一样。结果就这么吵了下来。
0 请登录后投票
   发表时间:2008-01-13  
对“拿int的计算来证明语言的计算能力”这种行为表示质疑。
0 请登录后投票
   发表时间:2008-05-08  
测试了一下各种循环,发现for in是最快的。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics