久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

lua,、groovy嵌入到j(luò)ava中的性能對比

 文檔集成 2015-11-09

去年的文章,備份

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


groovy天生與java有著極高的兼容性,兩者間對象無縫存取,,支持jsr223,。而lua是基于C的,需要調(diào)用jni,,jni的性能是硬傷,。這塊網(wǎng)上基本都用luajava,好多年不更新了,,不支持jsr223,,而且很多方法都沒有實(shí)現(xiàn),也不能做到對象無縫存取,,比如lua傳到j(luò)ava的對象,,java用不了。 另一個是luaj,,基于java的lua庫,,快速,穩(wěn)定,,支持jsr223,,測試對比用的是這個,。 再提一個jnlua,文檔里寫的很牛逼,,支持jsr223,,支持雙向?qū)ο笳{(diào)用,結(jié)果根本跑不了,,shit,。

測試程序都是基于jsr223編寫,先經(jīng)過腳本編譯,。再運(yùn)行一遍腳本,。 然后統(tǒng)計(jì)調(diào)用腳本100次消耗的時間,求平均,??梢匀コ幾g腳本、初次運(yùn)行等因素帶來的干擾,。測試機(jī)器為win32機(jī)器,。

對比結(jié)果如下:

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

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

附100000次整數(shù)比較的測試代碼:

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(“l(fā)ua 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下結(jié)果 lua:7ms groovy:9ms
mac os下結(jié)果 lua:7ms groovy:1ms

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多