本測試資料真實,但只做為參考。歡迎大家討論。
除做比較外,也可供PHP,JSP程式員參考,以便最佳化自己的程式。
一.算術運算
a.測試標準
迴圈N次,並做整型自加運算。
b.測試
測試代碼:
測試類型 |
JSP int整型 |
JSP long整型 |
JSP long整型2 |
PHP |
PHP2 |
測試代碼 |
int i=0; while (i<XXXX) { i++; } |
long l=0; while (l<XXXX) { l++; } |
long l=0; while (l<XXXX) { l=l+1; } |
$i=0; while ($i<XXXX) { $i++; } |
$i=0; while ($i<XXXX) { $i=$i+1; } |
測試結果(單位:毫秒)
測試結果說明:m-n表示主要波動範圍介於m和n之間;n表示出現次數非常之多的數值或平均值,m (x,y)表示偶爾會出現x,y。以下相同。
XXXX取值 |
JSP int整型 |
JSPlong整型 |
JSPlong整型2 |
PHP |
PHP2 |
1000 |
0 |
0 |
0 |
0-1 |
0-1 |
10000 |
0 |
0 |
0 |
3-4 |
6-7 |
100000 |
0 |
0 |
0(16,32) |
34-35 |
51-52 |
1000000 |
0(10) |
0(16,32) |
0(16,32) |
348-368 |
527-534 |
10000000 |
0(13) |
16-32 |
32-78 |
3547-3585 |
5239-5390 |
100000000 |
0(16) |
266-281 |
265-281 |
35309-35486 |
1000000000 |
0(16,743) |
2625-2676 |
2203-3687 |
c.結論
Java的算術運算,最佳化得很好,估計是直接的對應CPU的指令,數值再大,算術運算效能都很平穩。
需要注意的是,long的運算時間要比int的運算時間要長一些(畢竟是32位的系統),所以,在無需用 到long時,盡量不要用long,而用int.
PHP是弱類型的變數,算術運算很不盡人意,估計不是直接對應機器碼的算術運算。
PHP算術運算的過程猜測如下,在運算前需要檢測變數是否是數值,並要將非數值轉換成數值,比如 ,PHP可以做這樣的運算:100+"zhoutang",結果等於100.正是因為是弱類型語言,加上運算 前的檢測和轉換,所以才導致算術運算的效能低下。
PHP的單次運算時間比較穩定,大概每10000次算術加運算花費的時間約為3.5ms
不同的運算方法,也對效能有影響。
二.字串運算
a.測試標準
字串串連運算對比。
b.測試
測試代碼:
測試類型 |
JSP |
PHP |
測試代碼 |
String str=""; while (str.length()< XXXX) { str+="a"; } |
$str=""; while (strlen($str)< XXXX) { $str.="a"; } |
測試結果(單位:毫秒)
XXXX取值 |
JSP |
PHP |
1000 |
0-16 |
1 |
10000 |
656-703 |
9-10 |
100000 |
105078-105235 |
95-103 |
c.結論
Java的字串是用對象處理,很明顯,在字串的比較過程中,Java比PHP差很遠。(因為字串操作 ,很大部分要做串連,這裡只比較串連運算,另外粗略比較了一下substring,兩者的差別不是很大)
PHP的字串運算,估計很多是直接調用C的字串函數,所以效率會高很多。
在做WEB開發中,字串的串連操作還是很頻繁的(包括很多時候產生SQL字串),所以,在算術運算 和字串運算兩個方面,Java(JSP)優勢不明顯,與PHP各有所長。