日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
有憑有據(jù) C語言真的比Java快?

上周報道了一篇《衰亡? 15歲的Java才到青春期》的文章,爭議很大,網友們分成了“Java紅”和“Java黑”。今天小編由在某人的博客中看到一篇文章,以這篇文章的內容做個引子開個頭,他比較了很多語言的運行速度,包括Ruby、Io、 PHP、Python、Lua、Java、Perl、Applescript、TCL、Javascript、OCaml、Ghostscript和C等。數(shù)據(jù)如下:

語言時間相對速度
ocaml compiled 3.09.20.05 seconds1.00 x
SBCL 1.0.20.13 seconds2.43 x
C gcc-4.0.10.14 seconds2.67 x
Java 1.4.20.39 seconds7.49 x
Lua 5.11.25 seconds23.81 x
Io 20070410 Vector1.37 seconds26.13 x
ocaml bytecode 3.09.23.75 seconds71.48 x
Python 2.5.19.99 seconds190.33 x
Ghostscript 8.5111.79 seconds224.51 x
Perl 5.8.6 Optimized12.37 seconds235.57 x
TCL 8.4 Optimized16.00 seconds304.76 x
Perl 5.8.621.75 seconds414.29 x
PHP 5.1.423.10 seconds440.05 x
Javascript SpiderMonkey v1.631.14 seconds593.10 x
Ruby 1.8.433.05 seconds629.54 x
Emacs Lisp47.00 seconds895.24 x
Applescript71.75 seconds1366.67 x
Io 2007041085.44 seconds1627.47 x

 
可以看到Java幾乎比C慢兩倍!

但是接著我發(fā)現(xiàn)他用的是Java的老版本而且只實驗了一次,這實際上并不能夠真實地體現(xiàn)Java的速度。

于是我迅速寫了點代碼運行100三次,并用我認為 “快”的方式運行(其實還有更快的,只是我比較懶沒有設定)。結果如下:

 
 
 
  1.              
  2. $ java -server -XX:CompileThreshold=1 Mandelbrot 2>/dev/null  
  3.               
  4.             Java Elapsed 2.994  
  5.               
  6.             Java Elapsed 1.926  
  7.               
  8.             Java Elapsed 1.955  
  9.               
  10. $ gcc -O8 mandelbrot.c  
  11.               
  12.             $ ./a.out 2>/dev/null  
  13.               
  14.             C Elapsed 2.03  
  15.               
  16.             C Elapsed 2.04  
  17.               
  18.             C Elapsed 2.05  
  19.              

C仍然贏得了***輪,但接下來的兩次明顯Java快。

當然,結果會因為代碼和機器的不同而不一樣,但有一點可以確定:Java運行相當快。

這次測試用的版本是Java 1.6.0—b105 和gcc 4.1.2,用的電腦是蘋果,內核是酷睿雙核2.33GHz ,Linux操作系統(tǒng)。我測試用的代碼為:

Java測試用的代碼

 
 
 
  1. import java.util.*;   
  2. class Mandelbrot  
  3.               
  4.             {    
  5.               
  6.             static int BAILOUT = 16;  
  7.               
  8.             static int MAX_ITERATIONS = 1000;              
  9.      private static int iterate(float x, float y)  
  10.               
  11.             {  
  12.               
  13.             float cr = y-0.5f;  
  14.               
  15.             float ci = x;  
  16.               
  17.             float zi = 0.0f;  
  18.               
  19.             float zr = 0.0f;  
  20.               
  21.             int i = 0;  
  22.               
  23.             while (true) {  
  24.               
  25.             i++;  
  26.               
  27.             float temp = zr * zi;  
  28.               
  29.             float zrzr2 = zr * zr;  
  30.               
  31.             float zizi2 = zi * zi;  
  32.               
  33.             zr = zr2 - zi2 + cr;  
  34.               
  35.             zi = temp + temp + ci;  
  36.               
  37.             if (zi2 + zr2 > BAILOUT)  
  38.               
  39.             return i;  
  40.               
  41.             if (i > MAX_ITERATIONS)  
  42.               
  43.             return 0;  
  44.               
  45.             }  
  46.               
  47.             }   
  48.      public static void run2()  
  49.               
  50.             {  
  51.               
  52.             int x,y;  
  53.               
  54.             for (y = -39; y < 39; y++) {  
  55.               
  56.             System.err.print("\n");  
  57.               
  58.             for (x = -39; x < 39; x++) {  
  59.               
  60.             if (iterate(x/40.0f,y/40.0f) == 0)   
  61.               
  62.             System.err.print("*");  
  63.               
  64.             else  
  65.               
  66.             System.err.print(" ");  
  67.               
  68.             }  
  69.               
  70.             }            
  71.               
  72.             }  
  73.   public static void run() {  
  74.               
  75.             Date d1 = new Date();  
  76.               
  77.             for (int i = 0; i < 100; i++) run2();  
  78.               
  79.             Date d2 = new Date();  
  80.               
  81.             long diff = d2.getTime() - d1.getTime();  
  82.               
  83.             System.out.println("\nJava Elapsed " + diff/1000.0f);  
  84.               
  85.             }   
  86.             public static void main(String args[]) {  
  87.               
  88.             run();  
  89.               
  90.             run();  
  91.               
  92.             run();  
  93.               
  94.             }  
  95.               
  96.             } 

C測試用的代碼

 
 
 
  1. #include  
  2. #import  
  3. #define BAILOUT 16  
  4. #define MAX_ITERATIONS 1000  
  5. int mandelbrot(float x, float y)  
  6. {  
  7. float cr = y - 0.5;  
  8. float ci = x;  
  9. float zi = 0.0;  
  10. float zr = 0.0;  
  11. int i = 0;  
  12. while(1) {  
  13. i ++;  
  14. float temp = zr * zi;  
  15. float zrzr2 = zr * zr;  
  16. float zizi2 = zi * zi;  
  17. zr = zr2 - zi2 + cr;  
  18. zi = temp + temp + ci;  
  19. if (zi2 + zr2 > BAILOUT)  
  20. return i;  
  21. if (i > MAX_ITERATIONS)  
  22. return 0;  
  23. }        
  24. }  
  25. void run2() {  
  26. int x,y;  
  27. for (y = -39; y < 39; y++) {  
  28. fputs("\n", stderr);  
  29. for (x = -39; x < 39; x++) {  
  30. int i = mandelbrot(x/40.0, y/40.0);  
  31. if (i==0)  
  32. fputs("*", stderr);  
  33. else  
  34. fputs(" ", stderr);  
  35. }           
  36. }  
  37. fputs("\n", stderr);  
  38. }  
  39. void run() {  
  40. struct timeval aTv;  
  41. gettimeofday(&aTv, NULL);  
  42. long init_time = aTv.tv_sec;  
  43. long init_usec = aTv.tv_usec;  
  44. int i;  
  45. for (i = 0; i < 100; i++)  
  46. run2();  
  47. gettimeofday(&aTv,NULL);  
  48. double query_time = (aTv.tv_sec - init_time) +   
  49. (double)(aTv.tv_usec - init_usec)/1000000.0;      
  50. printf ("C Elapsed %0.2f\n", query_time);  
  51. }  
  52. int main (int argc, const char * argv[]) {  
  53. run();  
  54. run();  
  55. run();  

其次,我還在Rhino編輯器上運行了JS的測試:

 
 
 
  1. $ java -cp rhino1_6R5/js.jar -server -XX:CompileThreshold=1   
  2.               
  3.             org.mozilla.javascript.tools.shell.Main -O 9 mandelbrot.js 2>/dev/null  
  4.               
  5.             JavaScript Elapsed 21.95  
  6.               
  7.             JavaScript Elapsed 17.039  
  8.               
  9.             JavaScript Elapsed 17.466  
  10.               
  11.             JavaScript Elapsed 17.147 

在這個測試中,JS比C慢九倍。如果CPU的速度沒18個月翻一番,那么2007年JS的運行速度就趕上2002 C 的速度了。

后來在C語言的測試中加了些cpp,-march=pentium4發(fā)揮了點作用,但結果還是比Java慢:

 
 
 
  1.               
  2. $ gcc -O9 -march=pentium4 mandelbrot2.c  
  3.               
  4.             $ ./a.out 2>/dev/null  
  5.               
  6.             C Elapsed 1.99  
  7.               
  8.             C Elapsed 1.99  
  9.               
  10.             C Elapsed 1.99  
  11.               

當然,這只是做了一個小測試,聽朋友說在Solaris下Java的速度最快!

【編輯推薦】

  1. 衰亡? 15歲的Java才到青春期
  2. 8月編程語言排行榜:微軟鋒利的刀C#
  3. 淺析java、C#、C++及VC之間關系
  4. Java和C++區(qū)別
  5. Java、.Net、PHP、Ruby優(yōu)劣勢概覽
  6. Java語言深入:C#與Java相似之處的對比
  7. 3G與IPTV是發(fā)展大方向

分享名稱:有憑有據(jù) C語言真的比Java快?
文章源于:http://m.5511xx.com/article/codcjsc.html