鍍金池/ 問答/數(shù)據(jù)分析&挖掘  Java  Python  C  C++  網(wǎng)絡(luò)安全/ 為什么這段相同邏輯的代碼,java的竟然比lua快那么多?

為什么這段相同邏輯的代碼,java的竟然比lua快那么多?

為什么這段相同邏輯的代碼在同一個(gè)機(jī)子上運(yùn)行時(shí),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
回答
編輯回答
安若晴

luaJIT屌屌的,甩所有語言到后排。
這個(gè)問題沒有技術(shù)含量,提問者也是小菜吧;

2017年3月3日 08:44
編輯回答
殘淚

個(gè)人觀點(diǎn),有錯(cuò)誤請指出,謝謝

java是編譯型語言,lua是解釋型語言,這個(gè)原因

2017年4月24日 00:22
編輯回答
爛人

原因應(yīng)該就是JAVA虛擬機(jī)有JIT,而LUA解釋器是純C語言標(biāo)準(zhǔn)庫函數(shù)寫的,沒有JIT,所以性能慢很多。我前一陣用LUA寫了個(gè)WireShark的協(xié)議插件,慢的要死,稍微大點(diǎn)的抓包文件就解析很久,無奈使用C++重寫了,性能簡直是天壤之別,就算是大文件也是瞬間解析完成。

2017年6月10日 20:33
編輯回答
過客

因?yàn)楝F(xiàn)在很多Java JVM已經(jīng)不是單純的解釋型了,很多都包含即時(shí)編譯的功能了。
你可以換用Lua的即時(shí)編譯器LuaJIT,效率直接吊打Java。

2018年3月11日 13:53