Julia和Java性能比較

一、介紹

Julia性能號稱能夠趕得上c/c++,我很好奇Julia的執行速度,由於我一直用的是Java,因此就想把Julia和Java作一下簡單的比較。
此次比較一下Julia和Java作一億次加法運算的速度。c++

二、Julia不作優化和Java比較

首先我寫的Julia代碼沒作優化,咱們看一下Julia的代碼執行:函數

x=0
@time for i in 1:10^8
    global x+=i
end

這是三次執行的結果:大約6s的時間性能

6.550459 seconds (200.00 M allocations: 2.980 GiB, 18.45% gc time)
  6.565272 seconds (200.00 M allocations: 2.980 GiB, 18.15% gc time)
  6.382583 seconds (200.00 M allocations: 2.980 GiB, 18.37% gc time)

再看Java代碼和執行結果:測試

public class Test1 {
    public static void main(String[] args) {
            long t1=System.currentTimeMillis();
            long x=0;
            for(int i = 1; i<=100000000; i++)
                x+=i;
            long t2=System.currentTimeMillis();
            System.out.println("x="+x+", duration="+(t2-t1));
        }
}

三次執行結果:大約40ms優化

x=5000000050000000, duration=41
x=5000000050000000, duration=40
x=5000000050000000, duration=40

從上面的執行結果看,Java明顯比Julia快不少,相差一百多倍的時間,可是這是Julia沒有優化的代碼,下面咱們看一下Julia優化後的狀況code

三、Julia優化後與Java比較

咱們去掉全局變量,把代碼放到函數裏面,而後調用函數,代碼以下,:io

function sumfor()
    x=0
    for i in 1:10^8
        x+=i
    end
    x
end
@time sumfor()
@time sumfor()

下面是三次執行的結果,因爲Julia第一次執行會作預編譯的操做,咱們調用兩次方法並以第二次結果爲準,
第二次執行只用了0.002ms的時間,比Java快了不少。編譯

0.080203 seconds (35.91 k allocations: 1.978 MiB)
0.000003 seconds (5 allocations: 176 bytes)
0.062682 seconds (35.91 k allocations: 1.978 MiB, 46.11% gc time)
0.000002 seconds (5 allocations: 176 bytes)
0.037539 seconds (35.91 k allocations: 1.978 MiB)
0.000002 seconds (5 allocations: 176 bytes)function

總結: 從上面的比較來看,Julia確實比Java快不少,不過這裏只作了簡單的比較,並無作嚴謹的測試,僅供參考。class

相關文章
相關標籤/搜索