lua、groovy嵌入到java中的性能對比(轉)


lua和groovy都是可以嵌入到java中的腳本語言。lua以高性能著稱,與C/C++在游戲開放中有較多使用,groovy是一個基於Java虛擬機(JVM)的敏捷動態語言,在jvm下有着不錯的性能。


groovy天生與java有着極高的兼容性,兩者間對象無縫存取,支持jsr223。而lua是基於C的,需要調用jni,jni的性能是硬傷。這塊網上基本都用luajava,好多年不更新了,不支持jsr223,而且很多方法都沒有實現,也不能做到對象無縫存取,比如lua傳到java的對象,java用不了。 另一個是luaj,基於java的lua庫,快速,穩定,支持jsr223,測試對比用的是這個。 再提一個jnlua,文檔里寫的很牛逼,支持jsr223,支持雙向對象調用,結果根本跑不了,shit。

測試程序都是基於jsr223編寫,先經過腳本編譯。再運行一遍腳本。 然后統計調用腳本100次消耗的時間,求平均。可以去除編譯腳本、初次運行等因素帶來的干擾。測試機器為win32機器。

對比結果如下:

  LuaLuaj 2.0.2 Groovy2.0.1 Jython2.5.3 Javajdk6
100000次for 4ms 2ms 42ms 1ms
100000次整數比較 7ms 9ms   1ms
外部傳入大小100000的List<Integer>,迭代相加 82ms 7ms   3ms
創建100000大小的table。並賦值 34ms 38ms   64ms
復雜四則計算100000次 480ms 280ms   130ms
100000記錄的group 578ms 286ms   180ms

可以看出在jvm環境中,groovy的性能基本是lua的2倍,特別是lua調用java傳入的對象時,性能更低。 兩種腳本語言創建table的性能都比java高。 不要再迷信那些官方的性能測試,不考慮應用的上下文,那些性能測試報告只能做個參考。

附100000次整數比較的測試代碼:

import javax.script.Bindings;

import javax.script.Compilable;

import javax.script.CompiledScript;

import javax.script.ScriptEngine;

import javax.script.ScriptEngineManager;

import javax.script.ScriptException;

 

public class IntEquals {

public static void main(String[] args) throws ScriptException {

ScriptEngineManager sem = new ScriptEngineManager();

 

ScriptEngine e = sem.getEngineByExtension(“.lua”);

CompiledScript cs = ((Compilable) e)

.compile(“for i=1,100000 do if i == 100 then end end  return 10″);

 

 

Bindings luab = e.createBindings();

cs.eval(luab);

 

long start = System.nanoTime();

for (int i = 0; i < 100; i++) {

cs.eval(luab);

}

System.out.println(“lua script for 100000 time:”

+ (System.nanoTime() – start) / 100000000 + “ms”);

// groovy

e = sem.getEngineByExtension(“groovy”);

cs = ((Compilable) e)

.compile(“for ( i in 1..100000 ) { if(i==100){};}; return 10″);

cs.eval(luab);

start = System.nanoTime();

for (int i = 0; i < 100; i++) {

cs.eval(luab);

}

 

System.out.println(“groovy script for 100000 time:”

+ (System.nanoTime() – start) / 100000000 + “ms”);

}

}

 

win下結果 lua:7ms groovy:9ms 
mac os下結果 lua:7ms groovy:1ms

http://www.tuicool.com/articles/QbMRFr

http://www.yiihsia.com/2012/09/lua、groovy嵌入到java中的性能對比/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM