Java和PHP的區別(含自己的理解)

考察點:Java特性

第一點:

Java:JIT運行時編譯熱點代碼

PHP:具有opcache機制,能夠把腳本對應的opcode緩存在內存,PHP7中還支持配置opcache.file_cache導出opcode到文件

相關名詞解析:

JIT:(just-in-time compilation)狹義來說是當某段代碼即將第一次被執行時進行編譯,因而叫“即時編譯”。在運行時優化熱點代碼  把Java字節碼轉化成機器碼 。

OPCache緩存的機制:將編譯好的操作碼放入共享內存,提供給其他進程訪問

第二點:

PHP的庫函數:用C實現

Java核心運行時的類庫(jdk/jre/lib/rt.jar,大於60MB):用Java編寫(jdk/src.zip),

Java應用運行的時候,用戶編寫的代碼以及引用的類庫和框架都要在JVM上解釋執行.對於 Java的HotSpot機制,直到有方法被執行10000次纔會觸發JIT編譯, 在此之前運行在解釋模式下,以避免出現JIT編譯花費的時間比方法解釋執行消耗的時間還要多的情況.

第三點:

PHP內置模板引擎,自身就是模板語言.

Java Web需要使用JSP容器如Tomcat或第三方模板引擎.

第四點:

PHP開發者不需要寫代碼參與進程和線程的管理

Java多線程編程需要Java開發者編碼參與.

PHP也可以運行在多線程模式下,比如Apache的event MPM和Facebook的HHVM都是多線程架構.不管是多進程還是多線程的PHP Web運行模式,都不需要PHP開發者關心和控制,也就是說PHP開發者不需要寫代碼參與進程和線程的管理,這些都由PHP-FPM/HHVM/Apache實現.PHP-FPM進程管理和併發實現並不需要PHP開發者關心,而Java多線程編程需要Java開發者編碼參與.

PHP一個worker進程崩潰,master進程會自動新建一個新的worker進程,並不會導致PHP服務崩潰.

而Java多線程編程稍有不慎(比如沒有捕獲異常)就會導致JVM崩潰退出.

對於PHP-FPM和Apache MOD_PHP來說,服務進程常駐內存,但一次請求釋放一次資源,這種內存釋放非常徹底. PHP基於引用計數的GC甚至都還沒發揮作用程序就已經結束了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章