Julia和Java效能比較
阿新 • • 發佈:2018-12-10
1、介紹
Julia效能號稱可以趕得上c/c++,我很好奇Julia的執行速度,因為我一直用的是Java,所以就想把Julia和Java做一下簡單的比較。這次比較一下Julia和Java做一億次加法運算的速度。
2、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優化後的情況
3、Julia優化後與Java比較
我們去掉全域性變數,把程式碼放到函式裡面,然後呼叫函式,程式碼如下,:
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)
總結: 從上面的比較來看,Julia確實比Java快很多,不過這裡只做了簡單的比較,並沒有做嚴謹的測試,僅供參考。