自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

有憑有據(jù) C語言真的比Java快?

開發(fā) 后端
誰說C比Java快?本文無意要分出那種語言好,面對(duì)眾多網(wǎng)友對(duì)“Java語言”的爭(zhēng)議,本文對(duì)Java和C進(jìn)行一個(gè)小測(cè)試,測(cè)試用的版本是Java 1.6.0—b105 和gcc 4.1.2,用的電腦是蘋果,內(nèi)核是酷睿雙核2.33GHz ,Linux操作系統(tǒng)。

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

語言 時(shí)間 相對(duì)速度
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慢兩倍!

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

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

  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快。

當(dāng)然,結(jié)果會(huì)因?yàn)榇a和機(jī)器的不同而不一樣,但有一點(diǎn)可以確定:Java運(yùn)行相當(dāng)快。

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

Java測(cè)試用的代碼

  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測(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編輯器上運(yùn)行了JS的測(cè)試:

  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 

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

后來在C語言的測(cè)試中加了些cpp,-march=pentium4發(fā)揮了點(diǎn)作用,但結(jié)果還是比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.               

當(dāng)然,這只是做了一個(gè)小測(cè)試,聽朋友說在Solaris下Java的速度最快!

【編輯推薦】

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

 

責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

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網(wǎng)絡(luò)

2022-11-02 08:12:47

TurbopackVite

2010-01-14 10:34:02

C++語言

2015-06-01 06:39:18

JavaJava比C++

2010-01-14 14:55:14

C++編譯器

2010-01-26 09:24:53

C++語言

2010-01-15 16:45:35

C++語言

2010-01-20 17:23:03

C++編程語言

2010-01-18 11:12:36

2010-03-19 09:39:17

Python編程語言

2022-06-08 09:20:58

Python基準(zhǔn)測(cè)試編程語言

2023-09-08 15:05:51

Mojo編程語言

2021-07-11 18:04:04

C語言

2022-10-27 08:31:31

架構(gòu)

2010-01-14 13:24:49

CC++語言

2010-01-14 17:52:02

2023-11-27 16:26:20

mainC語言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)