Java和Groovy效能測試
一直使用Java呼叫Groovy指令碼完成一些隨時可能調整修改的任務。今天測試了以下效能,還不錯。測試程式碼如下:
Java程式碼:
public class TestC {
static long fib(long n) {
if (n < 2) return n;
return fib(n - 1) + fib(n - 2);
}
public static void main(String[] args) throws CompilationFailedException,
IOException, InstantiationException, IllegalAccessException {
for (int p = 0; p < 10; p++) {
long k = 0;
long start = System.currentTimeMillis();
for (long i = 0; i < 40; i++) {
k = k + fib(i);
}
System.out.println(System.currentTimeMillis() - start);
//System.out.println(k);
}
System.out.println("=======");
long start = System.currentTimeMillis();
GroovyClassLoader loader = new GroovyClassLoader(
TestC.class.getClassLoader());
Class groovyClass = loader.parseClass(new File("Test.groovy"));
GroovyObject obj = (GroovyObject) groovyClass.newInstance();
System.out.println("Compile and new time use "+(System.currentTimeMillis() - start));
for (int p = 0; p < 10; p++) {
obj.invokeMethod("main", new Object[] {});
}
}
}
Groovy指令碼Test.groovy:
class Test {
static long fib(long n) {
if (n < 2) return n
return fib(n - 1) + fib(n - 2)
}
static main(args) {
long k=0;
long start = System.currentTimeMillis();
for(long i=0;i<40;i++){
k = k+fib(i);
};
println(System.currentTimeMillis()-start);
//println k;
}
}
執行結果:
928
913
921
929
931
927
914
927
921
923
=======
Compile and new time use 523
2657
2661
2653
2660
2660
2665
2654
2667
2668
2669
可以看到,編譯指令碼時花費了500多毫秒,執行時指令碼的時長是Java程式碼的3倍左右。這效能已經相當可以了。而且通過上述程式碼可以看出,一定要先把指令碼編譯快取起來,後面用的時候不用編譯了,編譯花費時間比較長的。