這樣從幾個方面來看:
1、運行機制:
Java代碼被編譯成字節碼後,會在虛擬機裏由JIT進行二次編譯成爲本地碼,據傳言其執行速度能夠和C++相媲美,通過我本身測試,用Java實現一個簡單的Memcache協議的緩存服務器,在Java 1.6下運行,和memcache自己相比,一樣數據量的存取時間比大概是3:2,雖然有差距,可是比想象的要好不少。Java 1.7在JIT方面作了大量的改進,性能比Java 1.6還要好。
PHP是直接對文本代碼進行解釋執行,即使有opcode緩存技術,仍然有不可逾越的性能鴻溝。PHP的opcode相似於java的class字節碼,還是解釋執行。
2、處理併發:
Java在併發處理上採起單進程多線程的方式,web應用會隨着web server的啓動而啓動,而來自web 瀏覽器的請求將被分配給線程池內的閒置線程處理,也就是說當有請求到達的時候,進程是準備好的,線程是準備好的,Java要作的僅僅是業務邏輯處理了。
PHP在併發處理上時採起多進程的方式,在web server裏沒有物理的web應用概念,每一個請求都至關於一個獨立的應用,而進程也隨着請求的到達才啓動,而隨着請求的結束而消亡。在Fast CGI環境下,有相似於線程池的進程池技術,對性能提升有很大的幫助。然而一方面web server和Fast cgi通信仍須要經過socket,多出了必定的IO損耗,另外一方面進程池內的進程間也很難進行通信,因此在併發處理上仍然沒法和Java相比。
3、數據庫應用:
Java能夠採用數據庫鏈接池技術,節省下數據庫鏈接過程帶來的時間損失。
PHP沒有這個好處,緣由來自上面的第二條。
在數據庫接口上java有JDBC,PHP有PDO,這兩個很相似。然而Java有很是多的ORM技術框架(如Hibernate)使數據庫操做變得異常簡單,而PHP的運行方式決定了它是ORM的禁區(固然也能夠作ORM,只是作到什麼程度是由你對ORM帶來的性能損耗的忍受程度決定的)。
4、緩存技術
Java是單進程,不少緩存能夠直接在Java的heap中作,而無需藉助外在的工具,固然也有很好的緩存框架,好比Ehcache,由於沒有網絡IO,因此性能很是高。
PHP多進程單線程決定了它只能藉助外來的緩存服務器,好比Memcache.
5、熱部署
Java的熱部署能力很弱,若是但願修個BUG而不停服是很難作到的。
PHP自然熱部署。
6、開發成本
一個好Java程序員所需的知識儲備更多,開發、調試所需的週期較長,好點的web server也都是收費的。
PHP免費、web server也免費。
7、安全性
這個要看你怎麼來定義安全性,若是是代碼安全,java class反編譯很容易,這點上來講二者差很少。
Java有安全配置機制可保證一些「非法操做」沒法執行,這點上來講PHP較弱。
然而Java很容易由於一個BUG致使整個應用宕掉,PHP就安全的多。 php
其實要提及來Java的好處多多,然而僅僅最後三條就可讓決策者取PHP而棄Java. java
我的感受php適合作複雜度不是特別高的網站或系統,若是拿一個小blog系統來說,php確定完勝與java。 程序員