1. 程式人生 > >Java和Groovy效能測試

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倍左右。這效能已經相當可以了。而且通過上述程式碼可以看出,一定要先把指令碼編譯快取起來,後面用的時候不用編譯了,編譯花費時間比較長的。