成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

有憑有據 C語言真的比Java快?

開發 后端
誰說C比Java快?本文無意要分出那種語言好,面對眾多網友對“Java語言”的爭議,本文對Java和C進行一個小測試,測試用的版本是Java 1.6.0—b105 和gcc 4.1.2,用的電腦是蘋果,內核是酷睿雙核2.33GHz ,Linux操作系統。

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

語言 時間 相對速度
ocaml compiled 3.09.2 0.05 seconds 1.00 x
SBCL 1.0.2 0.13 seconds 2.43 x
C gcc-4.0.1 0.14 seconds 2.67 x
Java 1.4.2 0.39 seconds 7.49 x
Lua 5.1 1.25 seconds 23.81 x
Io 20070410 Vector 1.37 seconds 26.13 x
ocaml bytecode 3.09.2 3.75 seconds 71.48 x
Python 2.5.1 9.99 seconds 190.33 x
Ghostscript 8.51 11.79 seconds 224.51 x
Perl 5.8.6 Optimized 12.37 seconds 235.57 x
TCL 8.4 Optimized 16.00 seconds 304.76 x
Perl 5.8.6 21.75 seconds 414.29 x
PHP 5.1.4 23.10 seconds 440.05 x
Javascript SpiderMonkey v1.6 31.14 seconds 593.10 x
Ruby 1.8.4 33.05 seconds 629.54 x
Emacs Lisp 47.00 seconds 895.24 x
Applescript 71.75 seconds 1366.67 x
Io 20070410 85.44 seconds 1627.47 x
 
可以看到Java幾乎比C慢兩倍!

但是接著我發現他用的是Java的老版本而且只實驗了一次,這實際上并不能夠真實地體現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操作系統。我測試用的代碼為:

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 <stdio.h> 
  2. #import <sys/time.h> 
  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發揮了點作用,但結果還是比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++區別
  5. Java、.Net、PHP、Ruby優劣勢概覽
  6. Java語言深入:C#與Java相似之處的對比
  7. 3G與IPTV是發展大方向

 

責任編輯:佚名 來源: 博客園
相關推薦

2025-03-18 12:30:00

RubyJava語言

2021-11-11 06:57:00

PythonPyPy程序

2020-11-09 09:33:37

多線程

2021-09-30 07:26:15

磁盤IO網絡

2022-11-02 08:12:47

TurbopackVite

2010-01-14 14:55:14

C++編譯器

2010-01-14 10:34:02

C++語言

2015-06-01 06:39:18

JavaJava比C++

2010-01-26 09:24:53

C++語言

2010-01-15 16:45:35

C++語言

2010-01-18 11:12:36

2010-01-20 17:23:03

C++編程語言

2022-06-08 09:20:58

Python基準測試編程語言

2010-03-19 09:39:17

Python編程語言

2023-09-08 15:05:51

Mojo編程語言

2021-07-11 18:04:04

C語言

2022-10-27 08:31:31

架構

2010-01-14 17:52:02

2023-11-27 16:26:20

mainC語言

2010-01-14 13:24:49

CC++語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲成人一区二区 | 视频一区二区在线观看 | 97精品超碰一区二区三区 | 国产成人精品综合 | 污污免费网站 | 日韩精品视频在线 | 欧美日韩中文在线 | 久久亚洲天堂 | 中文字幕乱码一区二区三区 | 国产三级电影网站 | a级免费视频 | 黄色成人av | 午夜久久久久久久久久一区二区 | 成人福利网站 | 日韩一级电影免费观看 | 亚洲精品一二区 | 国产毛片视频 | 日韩欧美在 | 成人国产精品久久 | 久久久成人一区二区免费影院 | 欧美高清视频一区 | 国产小网站 | 91久久精品日日躁夜夜躁国产 | 激情一区二区三区 | 91在线一区二区三区 | 免费同性女女aaa免费网站 | 久草视频网站 | 97超碰人人草 | 毛片软件 | aaa综合国产 | 精品乱码一区二区三四区 | 成人午夜精品 | 狠狠操电影 | 久久久久久久网 | 亚洲一区二区 | 欧美一区二区 | 完全免费在线视频 | 成人影视网址 | 亚洲成人网在线观看 | 亚洲欧美日韩精品久久亚洲区 | 欧美在线观看黄色 |