从php转入java开发也有一段时间了,阿里年会归来,高铁上旅途漫漫,所以跟同事聊起了java和php的比较。问:java有解释执行和jit,php有opcode,那如果把php的opcode做成编译式的,或者是把java源代码直接进行解释执行,那java和php是不是就相同了?
答:首先java和php的区别不止在这一个方面,php是动态语言,java是静态语言,php的数据类型是可变的,检测变量类型肯定会有性能上的消耗,会使程序的执行流程加长。如果java直接解释执行那将享受不到jvm的强大的底层功能,并且如果服务器系统环境变化了,java源文件生成的机器码将可能执行不了。如果php提前编译成opcode将会使得php丧失即改即生效的特性,得不偿失。
java比php好在哪里:
编辑器对java的支持比php好,比如统一改名,这有利于程序的可维护性;
java的pojo类可以使程序的编写更加方便,更加可控,可以利用编辑器的功能进行一些方便的处理;
php由于是动态语言,所以在运行之前变量的类型是不确定的,运行时需要判断变量的类型,这就要消耗一定的性能;
php在完成一个请求后会销毁资源,导致很多资源没法复用,而java的static属性是会一直存在于内存中的,不会因为请求的结束而销毁,main方法或者跟服务相始终的方法下的局部变量也不会随着请求的结束而销毁,利用这样的特性spring实现了自动注入,在项目的启动阶段就把必要的对象创建好,虽然内存变高了,但是不用像php那样每来一个请求就重新加载并且初始化所有的资源了。java这样就可以很好的实现连接池,而php则很难实现连接池,并且php甚至连单例模式都没法真正实现。这一条可能就是像阿里京东这样的公司放弃php的关键原因吧,高并发环境下java比php应该是高很多个量级,而php更加适合中小型的项目;
java的异常机制比php的更加完善,这使得java更加稳定;
php的环境搭建更加复杂,nginx、apache、php都需要进行配置编译安装,java的springboot可以直接git下载代码就可以启动项目;
java整个生态体系更加完整,tomcat、kafka、lucene、solr、es,等等各种开源软件都是java实现的,而php则大部分是依赖于c语言实现的开源软件;
guava的本地缓存可以缓存下本来需要io的数据,减少io占用,而php缓存基本上依赖于memcache、redis这样的分布式缓存,依然会有大量的io消耗,即便利用一些扩展可以把资源缓存在本地,但是由于php是多进程的,肯定会比多线程的java耗费更多的性能;
php用完就销毁所有资源的这个特性导致没法维持长连接,现在的swoole框架虽然可以做长连接这一块,但是性能上还是无法和编译语言相抗衡。
php为什么还存在:
java虽然有那么多好处,但对于中小型项目来说并没有这么多的要求,用php可以快速开发完成项目。
相关推荐:
以上是java和php的分析比较的详细内容。更多信息请关注PHP中文网其他相关文章!