老問題新測試:java和C單機效能比較
Java和C最大的不同是在於Java的可伸縮性Scalable,能夠平滑發展到分散式雲端計算平臺,透過雲端計算能夠處理不斷增長的業務訪問量,這個代價過程是非常小容易的。
那麼在單機環境下,Java過去一直被認為低於C程式,最近老外做了一個實驗,進行了比較:
在新的x86上執行100 million 迴圈,結果如下:
> a.out 100000000
100000000 hashes in 5.636362 secs
> java str_hash 100000000
100000000 hashes in 5.745 secs
兩者相差無多,據作者介紹,如果在老版本的gcc & Java比較,Java會比C快15%,但這次是C++ 要快2%。
測試結果:
> a.out 100000000
100000000 primes in 1.568016 secs
> java sieve 100000000
100000000 primes in 1.548 secs
Java要快些。
在同樣x86上測試結果:
> a.out 1000000000 0
1000000000 adds in 2.657645 secs
> java vcall 1000000000 0
1000000000 adds in 0.0 secs
Java幾乎是無限地快,至少可以說明Java不比C慢,甚至在某些情況下快於C,那種認為java比C慢的觀點應該扔到垃圾堆裡去了。
原文:
那麼在單機環境下,Java過去一直被認為低於C程式,最近老外做了一個實驗,進行了比較:
String Hash案例:
Complete C++ code: http://pastebin.com/d280c1cd4
Complete Java code: http://pastebin.com/m541c4655
主要核心程式如下,是一個迴圈:
int h=0; for( int i=0; i<len; i++ ) h = 31*h+str[i]; return h; <p class="indent"> |
在新的x86上執行100 million 迴圈,結果如下:
> a.out 100000000
100000000 hashes in 5.636362 secs
> java str_hash 100000000
100000000 hashes in 5.745 secs
兩者相差無多,據作者介紹,如果在老版本的gcc & Java比較,Java會比C快15%,但這次是C++ 要快2%。
篩選案例
Complete C++ code: http://pastebin.com/m3784c090
Complete Java code: http://pastebin.com/m4b414295
核心程式碼如下:
bool *sieve = new bool[max]; for (int i=0; i<max; i++) sieve[i] = true; sieve[0] = false; sieve[1] = false; int lim = (int)sqrt(max); for (int n=2; n<lim; n++) { if (sieve[n]) { for (int j=2*n; j<max; j+=n) sieve[j] = false; } } <p class="indent"> |
測試結果:
> a.out 100000000
100000000 primes in 1.568016 secs
> java sieve 100000000
100000000 primes in 1.548 secs
Java要快些。
Profiling Enables Big Gains案例
Complete C code:
vcall.cpp http://pastebin.com/m70dbe7d6
vcall.hpp http://pastebin.com/m13055a8c
A.cpp http://pastebin.com/m5aa1b232
B.cpp http://pastebin.com/m2e46ec23
Complete Java code:
vcall.java http://pastebin.com/m149bbdf0
A.java http://pastebin.com/m2e33d6df
B.java http://pastebin.com/m2b1d75bb
核心程式碼是:
int sum=0; for (int i = 0; i < max; i++) sum += val(); // virtual call return sum; <p class="indent"> |
在同樣x86上測試結果:
> a.out 1000000000 0
1000000000 adds in 2.657645 secs
> java vcall 1000000000 0
1000000000 adds in 0.0 secs
Java幾乎是無限地快,至少可以說明Java不比C慢,甚至在某些情況下快於C,那種認為java比C慢的觀點應該扔到垃圾堆裡去了。
原文:
Java vs C performance... again...
[該貼被banq於2009-09-08 11:21修改過]
相關文章
- PyPy 和 CPython 的效能比較測試Python
- Apache Prefork和Worker模式的效能比較測試Apache模式
- C#比較dynamic和Dictionary效能C#
- Java 字串比較、拼接問題Java字串
- Java三代單元測試工具的比較[轉貼]Java
- JAVA IO效能比較Java
- JAVA死鎖排查-效能測試問題排查思路Java
- 單機快取JCS Ehcache OSCache Cache4J測試比較快取
- 集合差異比較演算法及效能測試演算法
- Nginx 和 Gunicorn 效能對比測試Nginx
- Apache Pulsar 與 Kafka 效能比較:延遲性(測試方法)ApacheKafka
- 2017 非標準 PHP 框架效能測試比較PHP框架
- 簡單的效能測試說明為什麼Go比Java快?GoJava
- Java中List集合效能比較Java
- Java 7新特點與效能測試Java
- [譯] JavaScript 單元測試框架:Jasmine, Mocha, AVA, Tape 和 Jest 的比較JavaScript框架ASM
- Lua、Luajit、Python、Node.js和Java效能測試對比PythonNode.jsJava
- 軟體測試工具比較
- Java和JavaSciprt比較Java
- Unixbench的使用(綜合效能測試、2D測試)和問題解決
- [shell基礎]——整數比較;字串比較;檔案測試;邏輯測試符字串
- c# sqlsugar,hisql,freesql orm框架全方位效能測試對比 sqlserver 效能測試C#SqlSugarORM框架Server
- shell測試和比較函式--test、[、[[、((、和 if-then-else解密函式解密
- Java Bean Copy元件的效能比較JavaBean元件
- Java JIT與AOT效能比較 - foojayJava
- JAVA中文比較問題的分析和解決 (轉)Java
- Swift和Objective C比較SwiftObject
- JAVA中生成隨機數Random VS ThreadLocalRandom效能比較Java隨機randomthread
- GaussDB T 1.0.2單機環境TPC-C之BenchmarkSQL效能測試SQL
- 自動化測試框架比較框架
- 堆排序和快速排序效能比較排序
- sqlldr和oracle_datapump效能比較SQLOracle
- eAccelerator的安裝和效能比較
- DECODE和CASE的效能比較
- 一些比較典型的機率期望問題
- 版本號比較大小問題
- 雲主機的硬碟IO效能比較硬碟
- 效能測試工具的 Coordinated Omission 問題