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

wmsok
  • 93

为什么这段相同逻辑的代码在同一个机子上运行时,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);
     
 }
}
输出:
1516427548266
1516427548329
63

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.001
1.464
1.463
Exit code: 0
回复
阅读 2.5k
4 个回答

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

luaJIT屌屌的,甩所有语言到后排。
这个问题没有技术含量,提问者也是小菜吧;

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

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

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

你知道吗?

宣传栏