PHP 为什么比 Java 这种语言要慢

2018-12-05 13:56:26 +08:00
 cc959798

有经验的大佬分别说说

3273 次点击
所在节点    问与答
22 条回复
DamonLin
2018-12-05 14:07:01 +08:00
你指的是什么慢?
allenhu
2018-12-05 14:17:46 +08:00
你有这个发帖的时间都搜出几十条结果了,不是实在看不下去,我都懒得回复
cc959798
2018-12-05 14:27:03 +08:00
@DamonLin 计算性能
cc959798
2018-12-05 14:27:43 +08:00
@allenhu 可你还是回复啦,你可以不回复我的
U2Fsd
2018-12-05 14:54:59 +08:00
U2Fsd
2018-12-05 14:56:18 +08:00
C++ vs. Python vs. PHP vs. Java vs. Others performance benchmark (2016 Q3)


https://blog.famzah.net/2016/09/10/cpp-vs-python-vs-php-vs-java-vs-others-performance-benchmark-2016-q3/
KasuganoSoras
2018-12-05 15:35:01 +08:00
PHP 是脚本解释语言,和 Java 当然没法比性能,二者用途也不完全相同,PHP 更偏向于写 Web 类的东西
460881773
2018-12-05 17:10:16 +08:00
因为 java 是编译语言啊 运行需要先编译成计算机能直接识别的语言。php 为解释型语言 运行的时候计算机需要理解这个语言是什么意思然后再执行 ,一个是直接执行一个是理解后再执行肯能效率不一样啊
yixiang
2018-12-05 17:16:02 +08:00
你图里的 PHP 7 不是比 Java 还要快么。手动捂脸。
yixiang
2018-12-05 17:16:21 +08:00
@yixiang 看错,以为图是楼主发的。
shansing
2018-12-05 17:31:00 +08:00
@460881773 Java 是编译成字节码文件,之后用 Java 虚拟机执行,不是计算机能“直接”识别的语言。PHP 到要执行的时候也是编译再运行的。早期 PHP 的编译很快,因为不需要做优化,后来的版本可能不同了。( PHP 也可以借助 Opcache 缓存字节码文件。)
isCyan
2018-12-05 17:41:22 +08:00
从来不觉得 PHP 慢,也没觉得 Java 快
lychnis
2018-12-05 20:05:27 +08:00
鱼和熊掌不可兼得 开发效率运行效率选一个
t6attack
2018-12-05 20:28:42 +08:00
如果遇到 php7 性能触顶,说明你的项目成功了,或者你们公司做的是大生意。偷着乐去吧 。
netherlanddennis
2018-12-05 20:31:06 +08:00
finian
2018-12-05 20:53:55 +08:00
@460881773 #8 你要说运行,Java 和 PHP 一样,都是解释运行的。性能差异体现在虚拟机(解释器)实现上。
sagaxu
2018-12-05 21:00:30 +08:00
@yixiang 他那个 JAVA 代码,用的是泛型数组,Array<ListInteger>开销大,所以比较慢,换成 int[]就跟 c++差不多了
FakeLeung
2018-12-05 21:11:26 +08:00
yuhhai
2018-12-06 09:53:26 +08:00
@460881773 话说 Java 编译的字节码跟二进制执行到底慢在哪里了
zzzzzzZ
2018-12-06 10:09:44 +08:00
Java 是预编译成字节码之后,在 JVM 中运行,然后 JVM 去操作设备。由于 JVM 的优化和 JIT 技术的出现,使编译这一块的性能无限接近于编译型语言,但是 Java 不是编译型语言。
同样 JVM 的优秀诞生了很多基于 JVM 的不同语言,知名的如支持函数式编程的 Kotlin 和 Scala
Java 只编译一遍,之后 JVM 跑的都是编译后的字节码,和 PHP5 跑一次编译一次性能差别太大,脚本语言都有这个毛病,PHP 已经努力解决了(Zend)。PHP7 为什么能够大幅度提升性能,重点就在 JIT 和 OPcache。

但是双方真正的差异不是编译方式,语言升级换代之后编译终归会被压缩到一个极致效率。PHP 和 Java 最大的不同在于,PHP 是动态语言,Java 是静态语言,或者说强类型语言。
[ ]
Java 开发牺牲了大量时间保证自己构建的代码符合系统保障,如果出现代码层面的错误,IDE 就过不去。这也是很多人吐槽的地方,"Java 会把中小型项目写成大型项目","Java 几十行几百行的代码我用 xxx 几行就搞定了"
但是一旦系统复杂度上升之后,弱类型的语言维护起来会哭爹喊娘,例如某前端语言一个比较奇偶的低级函数不再维护之后,全世界 N 台直接 /间接引用该函数的项目同时崩溃。大家应该都有使用 JS 被重名函数和运算符折磨的经历。
Java 在引用第三方代码时对系统几乎无影响,重名的都需要指定包路径的引用才能使用。

弱类型的变量在计算上天生具备劣势,不提 Java 给自身各种类型、数据结构提供执行效率的 jdk 和其它库,就简单的直接运算,弱类型都必须先确定上下文类型。

当然两者在其它地方也有差异:
IO 层面:[https://www.toptal.com/back-end/server-side-io-performance-node-php-java-go]
WEB 层面:[https://www.linkedin.com/pulse/java-vs-php-web-fadi-botros] 此文首先就提到了 STRONGLY TYPED 和 JIT

当然纠结这些是完全没有必要的,试想一下三五十年后,当计算机性能更新换代到现在无法想象的程度,当新的 xx 语言在编译、开发效率、执行性能上完全秒杀我们使用的这些 90 年代语言的时候。现在所谓的性能其实都是浮云

计算机科学的美妙也不止语言特性这一块,学术性质的了解一下即可

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/514541

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX