簡單的效能測試說明為什麼Go比Java快?
本次小測試並不是試圖說明Go是Java的替代,Go lang和Java本就不是實現相同型別任務的語言 : Java是企業開發語言,而Go是系統程式語言。
我的系統配置是16 GB RAM,Intel(R)Core(TM)i7-8550U CPU 2.00GHz和500 GB SSD。
我只是使用Go和Java語言編寫了一個階乘程式,併為各種輸入建立了一個分析表和時間表。
Go程式碼:
package main import ( "fmt" "time" "math/big" ) func main(){ allInputs := [5]int64{10000, 50000, 100000, 500000, 1000000} var i int = 1 for i=0;i<len(allInputs);i++ { var before = GetTimeStamp() var factorial *big.Int = big.NewInt(1) var j int64 = 1 for j=1; j<=allInputs[i]; j++ { factorial = factorial.Mul(factorial,big.NewInt(j)) } var after = GetTimeStamp() var elapsedTime = after - before fmt.Println("Elapsed Time for %s is %s",allInputs[i],elapsedTime) } } func GetTimeStamp() int64 { return time.Now().UnixNano() / int64(time.Millisecond) } |
輸出:
Output: Factorial Time To calculate factorial 10000 0.03 seconds 50000 0.41 seconds 100000 2.252 seconds 500000 68.961 seconds 1000000 224.135 seconds |
Java程式碼:
import java.math.BigInteger; import java.util.*; class Forloop { public static void main(String []args){ int[] allInputs = new int[]{10000, 50000, 100000, 500000, 1000000}; for(int i=0;i<allInputs.length;i++){ BigInteger number = BigInteger.valueOf(allInputs[i]); BigInteger result = BigInteger.valueOf(1); long before = System.currentTimeMillis(); for (int j=1;j<=allInputs[i];j++){ result = result.multiply(BigInteger.valueOf(j)); } long after = System.currentTimeMillis(); System.out.println("Elapsed Time: "+(after - before)); } |
輸出結果:
Output: Factorial Time To calculate factorial 10000 0.112 seconds 50000 1.185 seconds 100000 2.252 seconds 500000 89.500 seconds 1000000 385.868 seconds |
從上面的程式中,我們可以看到Go對於各種輸入資料處理所用的時間比Java要短。
為什麼Go比Java更快?
Go被編譯為機器程式碼並直接執行,這使得它比Java快得多。之所以如此,是因為Java使用VM來執行其程式碼,這使得它與Golang相比變慢。
Golang在記憶體管理方面也很出色,這在程式語言中至關重要。Golang沒有引用但有指標。
在區域性變數的情況下,與Java相比,Golang更好。區域性變數在Java語言和其他語言中是儲存在堆疊中。但是在Golang中有一個例外,它可以從函式返回指向區域性變數的指標。
相關文章
- cursor: pin S簡單說明以及測試、解決
- try的簡單效能測試
- mysql簡單效能測試MySql
- 為什麼python比c更簡單Python
- 【PG效能測試】pgbench效能測試工具簡單使用
- Windows IO 效能簡單測試Windows
- Jmeter效能測試簡單使用JMeter
- 為什麼nginx效能比apache效能好NginxApache
- 為什麼 call 比 apply 快?APP
- 為什麼Python比Java簡單呢?Python值得學習嗎?PythonJava
- 軟體測評中心簡要分析:為什麼要進行軟體效能測試?
- 老問題新測試:java和C單機效能比較Java
- TSBS 是什麼?為什麼時序資料庫 TDengine 會選擇它作為效能對比測試平臺?資料庫
- 單元測試效率優化:為什麼要對程式進行測試?測試有什麼好處?優化
- sqlmap簡單中文說明SQL
- WebAssembly 為什麼比 asm.js 快?WebASMJS
- 一個簡單例子說明為什麼C語言在2013年仍很重要單例C語言
- 為什麼?為什麼?Java處理排序後的陣列比沒有排序的快?想過沒有?Java排序陣列
- 為什麼redis是單執行緒的以及為什麼這麼快?Redis執行緒
- 比Redis快5倍的中介軟體,究竟為什麼這麼快?Redis
- 分支預測:為什麼有序陣列比無序陣列快?陣列
- 面試官:為什麼 Promise 比setTimeout() 快?面試Promise
- jarsigner 簡單使用說明JAR
- JavaScript字串api簡單說明JavaScript字串API
- 介面測試的價值(為什麼要做介面測試)
- 軟體測試培訓分享:效能測試的目的是什麼
- 為什麼說Java的就業面廣?Java就業
- Google 推出 C++ Go Java Scala的基準效能測試GoC++Java
- 效能測試、負載測試、壓力測試有什麼區別?負載
- 移動效能測試---工具PerfDog簡單使用
- Python容器相關簡單效能測試Python
- Go單元測試Go
- 程式設計師為什麼不寫單元測試?程式設計師
- 陣列,map,unordered_map的簡單效能測試陣列
- 效能測試 —— 什麼是全鏈路壓測?
- 為什麼單元測試不是持續交付的唯一答案
- redis是單執行緒的,為什麼這麼快Redis執行緒
- MySQL中MyISAM為什麼比InnoDB查詢快MySql