为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这段相同逻辑的代码,java的竟然比lua快那么多?

为什么这段相同逻辑的代码,java的竟然比lua快那么多?

呼啦一阵风 2019-02-18 07:24:20
为什么这段相同逻辑的代码在同一个机子上运行时,java的竟然比lua快那么多? Java代码: import java.lang.Math; import java.util.*; import java.util.Date; public class Test { public int isprime(int num){ int count = (int) Math.sqrt(num); while (count >1){ if (num % count == 0){ return 0; } count -= 1; } return 1; } public static void main(String[] args) { Test t = new Test(); Date begin = new Date(); for (int i=0;i<100000;i++){ t.isprime(i); } Date end = new Date(); long interval = end.getTime() - begin.getTime(); System.out.println(begin.getTime()); System.out.println(end.getTime()); System.out.println(interval); } } 输出:1516427548266151642754832963 Lua代码: function isprime(num) t1,t2 = math.modf(math.sqrt(num)); while (t1 > 1) do if (num % t1 == 0) then return 0; end t1 = t1 - 1; end return 1; end time1 = os.clock(); print(time1); for i=2,100000,1 do isprime(i); end time2 = os.clock(); print(time2); print((time2 - time1)); 输出:lua -e "io.stdout:setvbuf 'no'" "test.lua" 0.0011.4641.463Exit code: 0
查看完整描述

4 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

因为现在很多Java JVM已经不是单纯的解释型了,很多都包含即时编译的功能了。
你可以换用Lua的即时编译器LuaJIT,效率直接吊打Java。

查看完整回答
反对 回复 2019-03-01
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

原因应该就是JAVA虚拟机有JIT,而LUA解释器是纯C语言标准库函数写的,没有JIT,所以性能慢很多。我前一阵用LUA写了个WireShark的协议插件,慢的要死,稍微大点的抓包文件就解析很久,无奈使用C++重写了,性能简直是天壤之别,就算是大文件也是瞬间解析完成。

查看完整回答
反对 回复 2019-03-01
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

个人观点,有错误请指出,谢谢

java是编译型语言,lua是解释型语言,这个原因

查看完整回答
反对 回复 2019-03-01
  • 4 回答
  • 0 关注
  • 564 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信