为什么这段相同逻辑的代码在同一个机子上运行时,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贡献1875条经验 获得超3个赞
原因应该就是JAVA虚拟机有JIT,而LUA解释器是纯C语言标准库函数写的,没有JIT,所以性能慢很多。我前一阵用LUA写了个WireShark的协议插件,慢的要死,稍微大点的抓包文件就解析很久,无奈使用C++重写了,性能简直是天壤之别,就算是大文件也是瞬间解析完成。
添加回答
举报
0/150
提交
取消