這樣從幾個方面來看:
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.html
「Java能夠採用數據庫鏈接池技術,節省下數據庫鏈接過程帶來的時間損失。
PHP沒有這個好處,緣由來自上面的第二條。」
緣由說的具體點,就是php沒法保存全局變量,php類中雖然有static變量,可是這個變量在一次http請求結束後就會被從內存中刪除掉,可是java的static變量是能夠一直存在內存中。這樣php就沒法使用「池」這種技術,由於沒法將池中的數據保存下來java
我從JSP和PHP的底層運做、框架擴展兩個方面來談談二者的優劣。c++
1.底層運做:PHP使用兩層、JSP使用三層來處理用戶的請求和回顯。
PHP的兩層:Web服務器軟件(Apache、Nginx)->PHP Zend解析器解釋腳本並回顯。
JSP的三層:Web服務器軟件(Apache、Nginx)->容器->Java虛擬機解析Servlet並回顯。
"容器"是JSP中的一個重要概念,容器能夠控制servlet的生命週期(實例化和回收servlet);支持多線程調用servlet並處理線程銷燬;使用XML配置安全性,不用寫死在servlet裏,不用從新編譯;把JSP代碼翻譯爲Java代碼。
PHP少了這個中間層,像多線程、安全性天然不如JSP。但PHP能夠採用Opcode技術把腳本解析的結果緩到內存(好比使用APC、eAccelerator、XCache),省略了由PHP腳本到Opcode解析過程。這樣速度固然比「把JSP代碼翻譯爲Java代碼」再由Java虛擬機解釋執行快。不過對於動態肯定的內容沒法使用Opcode緩存技術。程序員
2.框架擴展:
PHP提供擴展,方便與其它語言相互調用(如C),也有成熟的PECL擴展可用。
JSP支持多框架,如1)使用Hibernate作數據持久鏈接,這也是JSP操做數據庫比PHP快好多倍的緣由,其次JSP與DB的接口操做也方便。2)使用Spring調用JavaBean處理業務邏輯。且JSP有Java作後盾,能夠調用不少J2EE成熟的庫(如EJB),而PHP是作不到的。web
另外,向@毛杭軍說的,"PHP開發的人已習慣用由JAVA發揚光大的一些優勢",PHP是面向過程的,因此開發快。而JSP有Java提供的諸多類庫,是面向對象的,因此功能強,但開發慢。以前公司作大型XXX系統服務器網站,使用的是JSP+ Oracle數據庫。淘寶網也使用的也是相同的架構。算法
1、 語言比較sql
Php是解釋執行的服務器腳本語言,首先php有簡單容易上手的特色。語法和c語言比較象,因此學過c語言的程序員能夠很快的熟悉php的開發。而java須要先學好java的語法和熟悉一些核心的類庫,懂得面向對象的程序設計方法。因此java不如php好學。數據庫
Java首先要編譯成字節碼.class文件,而後在java虛擬機上解釋執行。Java的web開發首先最容易想到的就是JSP(如今已經到JSP2.0),原來的java的web開發都是用servlet來實現的,用servlet來開發須要程序員在java的源文件中嵌入大量的html代碼。因此後來就出現了JSP,JSP能夠方便的嵌入到html文件當中,其實jsp文件在服務器上執行的時候首先會被應用服務器轉換成servlet,而後再編譯執行。Jsp能夠經過servlet和JavaBean的支持產生強大的功能。JavaBean 是一種可複用的、跨平臺的軟件組件。使用javabean能夠方便的實現java代碼和html的分離,可以加強系統的功能和軟件的複用性。設計模式
Java的web開發屬於SUN公司定義的J2EE其中的規範。並且在J2EE中包括了java的web開發的全部方面,如:JSP、Servlet、JDBC、JNDI、JAVABEAN、EJB等等。J2EE就特別適合於作大型的企業級的應用。
2、 數據庫訪問比較
Java經過JDBC來訪問數據庫,經過不一樣的數據庫廠商提供的數據庫驅動方便地訪問數據庫。訪問數據庫的接口比較統一。
PHP對於不一樣的數據庫採用不一樣的數據庫訪問接口,因此數據庫訪問代碼的通用性不強。例如:用Java開發的web應用從MySQL數據庫轉到Oracle數據庫只須要作不多的修改。而PHP則須要作大量的修改工做。
3、 系統設計架構比較
採用Java的web開發技術,須要使用的是面向對象的系統設計方法,而PHP仍是採用面向過程的開發方法。因此用Java進行開發前期須要作大量的系統分析和設計的工做。
4、 跨平臺性
Java和PHP都有很好的跨平臺的特性。幾乎均可以在不做任何修改的狀況下運行在Linux或者Windows等不一樣的操做系統上。
5、 開發成本比較
PHP最經典的組合就是:PHP + MySQL + Apache。很是適合開發中小型的web應用,開發的速度比較快。並且全部的軟件都是開源免費的,能夠減小投入。
Java的web應用服務器有免費Tomcat、JBoss等,若是須要更好的商業化的服務有:Web Sphere和 Web logic。
6、 分佈式多層架構比較
PHP只能實現簡單的分佈式兩層或三層的架構,而JAVA在這方面就比較強大,能夠實現多層的網絡架構。數據庫層(持久化層)、應用(業務)邏輯層、表示邏輯層彼此分開,並且如今不一樣的層都已經有一些成熟的開發框架的支持。例如Struts就是利用java的web開發技術實現了MVC的設計模式,而在業務邏輯層也有Spring框架,數據庫持久化層有Hibernate等框架。這些框架能夠方便開發者高效、合理、科學得架構多層的商業應用。
下面簡要的說一下Struts,它實質上是在JSP Model2的基礎上實現的一個MVC(Model、View、Controler)框架。JSP Model2體系結構是一種聯合使用JSP 與Servlet 來提供動態內容的方法。在Struts框架中,模型由實現業務邏輯的JavaBean或EJB組件構成,控制器由Servlet實現的,視圖由一組JSP文件組成。採用Struts能夠明確角色的定義和開發者與網頁設計者的分工。並且項目越複雜,其優點越明顯。
7、 源代碼安全
PHP開發的程序的源代碼都是公開的,他人拿到php開發的程序後均可以進行修改。
Java開發的程序,最後用戶拿到的是隻是一些編譯好的class類,沒法看到完整的源代碼,安全性高。
8、性能比較
有人作過試驗,對這兩種種語言分別作迴圈性能測試及存取Oracle數據庫測試。
在循環性能測試中,JSP只用了使人吃驚的四秒鐘就結束了20000*20000的迴圈。而PHP測試的是2000*2000循環(少一個數量級),卻分別用了63秒。
數據庫測試中,兩者分別對 Oracle 8 進行 1000 次 Insert,Update,Select和Delete: JSP 須要 13 秒,PHP 須要 69 秒。
這兩種語言使用的場景不是很同樣,php通常用來作內容管理系統、論壇(以上兩項表明是康盛的產品)、博客(facebook)、社交(微博)。
java通常用作企業級的開發,這種開發的重點適應業務需求的變更性,並且業務的複雜度也比較高。若是性能要求高的,也是要首選java。
facebook、百度、新浪的訪問量也很大,可是他們僅僅將php做爲頁面展現層。facebook使用了多種語言(php,c/c++,java,erlang等),他們的php直接編譯成c++運行,php和各個語言之間使用shift框架進行通訊。同時facebook使用大量的nosql。
新浪微博的php,估計也是使用他們本身的引擎,新浪有ACE,估計底層有一些C的擴展。同時他們還有本身的KVDB,來處理大數據。
百度底層的搜索算法層應該是C寫的,牽扯到數據庫處理層,估計是java或者c寫的。
因此說若是使用php處理大數據的話,通常是大公司用,這時候php就退化爲一個界面展現層。
java處理大數據,依靠他先天的優點,能夠方便的使用鏈接池等技術,又有soa等成熟技術處理分佈式的業務需求。這方便國內的表明確定是淘寶、阿里巴巴。