面对即将发布的php jit版本,会大大的增加php的运行效率,java会做这方面的探索吗
问题来自Java技术沙龙的金超健
Java线下沙龙报名链接:https://yq.aliyun.com/activity/796
作为Android移动端和准前端的研发,可能我并非PHP问题的最佳回答者。不过我可以试着从自己对 Java 和 Android 的理解,来解答您的问题。
考虑到 Java 在很早以前就支持了 JIT(Just In Time),性能收益、稳定、成熟度都得到了大量的验证,所以我理解您提到的“Java 会做这方面的探索吗”,应该针对的是“Java 是否还会进一步优化性能,以使得自己更有竞争力”吧。
我的答案是,会的,而且在持续进行。
例如最新的 Java 10,引入了一种叫“应用类数据共享”——Class Data Share 特征。一句话概括,就是允许多个进程「共用」「应用」的ClassLoader(原来是每个 JVM 进程一个,除了系统的 BootClassLoader 外),这不仅能显著提高启动时间,还能有效减少内存占用。而且更奇妙的是,整个过程可以做到「近乎无感知」,都是由 JVM 自行分析来实现。当然,CDS 的功用不仅于此。
此外,Java 9 引入了 Android 在几年前就有的 AOT(Ahead Of Time)能力,可以在运行前(例如安装过程中)就做一次“预编译”,编译成机器码并直接运行(近似于 C++ 编译的应用),基本上干掉了以前的“运行期解释”过程(当然,从 Android 7.0 版本开始,为了安装速度考虑而做了些优化)。而 Java 10 还进一步引入了新的 JIT 编译器 —— Graal,其灵活的模块架构、高可维护性,使其带上了“未来能和C++性能比肩”的光环。
其实,参考下 Android 的经验就会发现,作为移动设备的「头牌」平台,Android 可以说是「Java 性能」的极致优化的体现。例如:用「Fork」来创建 JVM 进程,省去了 JVM 和 Android 系统类的初始化时间;最早引入了 Dalvik、ART,进一步降低内存占用和功耗,等等不一而足。而看到了 Android 对低端设备的性能的努力,就能看到 Java 未来的性能方向。
补充:如果从「更长远」的时间线上考虑,随着硬件性能的不断提升,成本的不断降低,也许有一天,性能问题将不再成为问题。一如现在「动态化」和 H5 会成为主流一样(而在当年,就性能问题而言,想都不敢想)。也许10年后回看今天(的历史),会感觉非常有意思吧。共勉。
PHP 7 之后会有什么 —— JIT
这是一个十分值得我们期待的版本,目前由 Zend 引擎的 Dmitry Stogov 主导。虽然它是基于 PHP 7.1 版本,但实际版本号尚未确定。
JIT 是什么?为什么是 JIT?
JIT (Just-In- Time 即时编译) 并非是新技术,很多语言例如 Java 早已实现。JIT 的思想很简单,即在程序运行时动态对程序进行编译,生成平台相关的机器码(比如运行它的机器 CPU 的本地代码),从而加快程序的运行速度。
为什么是 JIT?
不妨先来看看 PHP 文件的执行流程。PHP 文件的执行流程大致是首先引擎加载 PHP 文件,解释器逐条解释执行代码。
引入 JIT 后,前面部分一样,重点是 JIT 编译器会根据 Runtime 信息对热点代码进行动态编译生成机器码,此后这部分代码就可以直接执行,不再需要解释器逐条解释执行,因此运行效率会得到提升。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。