PHP和java比较

这样从几个方面来看:
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等成熟技术处理分布式的业务需求。这方便国内的表明确定是淘宝、阿里巴巴。

相关文章
相关标签/搜索