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 年代语言的时候。现在所谓的性能其实都是浮云
计算机科学的美妙也不止语言特性这一块,学术性质的了解一下即可