写点什么

让 PHP 跑在 JVM 上——JPHP

  • 2014-03-26
  • 本文字数:825 字

    阅读完需:约 3 分钟

JPHP 是一个面向 Java 虚拟机的 PHP 实现,支持 PHP(5.3+)的很多特性。JPHP 负责将 PHP 源代码编译为 JVM 字节码,使其能够运行在 JVM 上,这一点和 JRuby、Jython 等实现类似。它支持 JDK 1.6 及以上版本。该项目发起于去年 10 月。

JPHP 无意替代 Zend PHP 引擎或 Facebook HHVM (HHVM 的思路是将 PHP 编译为一种中间字节码,再通过 JIT 将字节码编译为 x64 机器码)。出于以下原因,设计者不打算为 JPHP 实现 Zend 运行时库(如 Curl、PRCE 等):

  • 能够在 PHP 中使用 Java 类库
  • 通过 JIT 和 JVM 提升性能
  • 使用更好的运行时库替换 Zend PHP 丑陋的运行时库
  • 将 PHP 语言的使用范围扩充到 Web 之外
  • JVM 对 Unicode 字符串和线程支持更好

JPHP 有如下功能:

  • JIT(比 PHP 5.4 快 2-10 倍)
  • 优化器(优化常量表达式、内联函数等)
  • 可以在 PHP 代码中使用 Java 的类库和类
  • Unicode 字符串(类似 Java 中的 UTF-16)
  • 线程、套接字
  • 环境架构(类似 runkit zend 扩展中的沙盒对象)
  • 支持 GUI,基于 Swing 实现而且有所改进,提供了更为灵活的布局
  • 面向类和函数的内嵌缓存系统
  • 面向类和函数的可选热更新(Optional Hot Reloading)机制

语言方面的特性包括:

  • 完全支持 PHP 5.2+(包括 OOP)
  • 闭包(PHP 5.3),在闭包中自动绑定 $this(PHP 5.4)
  • 完全支持命名空间(PHP 5.3)
  • 类的 spl 自动加载(PHP 5.3)
  • Iterators、ArrayAccess 和 Serializable
  • 类、数组和 callable 的类型约束(PHP 5.4)
  • 数组短语法(PHP 5.4)
  • 针对循环引用的 GC(PHP 5.3)

更多特性可以查看该项目的 README 文件。

此外,JPHP 还提供了一些 PHP 不支持的特性,比如在 __toString 方法中可以使用异常、对标量的类型约束等。

JPHP 并非改进 PHP 性能的第一次尝试,到底效果如何,我们拭目以待。感兴趣的读者可以下载并动手尝试一下。


感谢孙镜涛对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-03-26 20:575619
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 143.6 次阅读, 收获喜欢 35 次。

关注

评论

发布
暂无评论
发现更多内容

Maven docker-maven-plugin 插件 Push 413 错误

HoneyMoose

Qt|模态窗口如何实现进入页面等待加载数据效果

中国好公民st

c++ qt 10月月更

Vue虚拟dom是如何被创建的

yyds2026

Vue

Python继承还不会,看这篇就够了

芥末拌个饭吧

继承 python 3.5+ 10月月更

“程”风破浪的开发者|如何更好的学习专业知识

闫同学

学习方法 10月月更 “程”风破浪的开发者

数据量剧增怎么办?Redis切片集群了解一下

芥末拌个饭吧

后端 redis 底层原理 10月月更

Webpack中的plugin插件机制

Geek_02d948

webpack

你知道Redis有哪些潜在的阻塞点吗

芥末拌个饭吧

后端 redis 底层原理 10月月更

HashMap源码分析(三)

知识浅谈

HashMap底层原理 10月月更

SAP | 内部表的表类型

暮春零贰

SAP 10月月更 内部表

Sonatype Nexus 管理员初始密码

HoneyMoose

React源码中的dom-diff

夏天的味道123

React

IP报文在阿里云上的神奇之旅:同地域内云上通信

阿里技术

通信 IP 路由

Vue中的diff算法深度解析

yyds2026

Vue

“程”风破浪的开发者|镜像仓库迁移的方法

琦彦

学习方法 Harbor 10月月更 “程”风破浪的开发者

深度解读Webpack中的loader原理

Geek_02d948

webpack

golang中的切片

六月的

Go slice

GaussDB(DWS)如何实现实时,批量和交付式查询一站式开发

乌龟哥哥

10月月更

“程”风破浪的开发者|慢慢踏上算法学习之旅

六月暴雪飞梨花

学习方法 算法 10月月更 “程”风破浪的开发者

在线问题反馈模块实战(八)​:实现图片上传功能(上)

bug菌

springboot 项目实战 10月月更

CentOS 上安装 Sonatype Nexus 仓库

HoneyMoose

【愚公系列】2022年10月 Go教学课程 035-接口和继承和转换与空接口

愚公搬代码

10月月更

在线问题反馈模块实战(七):安装部署swagger2

bug菌

springboot 项目实战 10月月更

在线问题反馈模块实战(九)​:实现图片上传功能(下)

bug菌

springboot 项目实战 10月月更

数据开发也能双轮驱动?

乌龟哥哥

10月月更

Fabric8 Docker Maven Plugin 如何让部署的时候执行 Docker 打包推送

HoneyMoose

Webpack中的高级特性

Geek_02d948

webpack

【一Go到底】第二十一天---defer

指剑

Go golang 10月月更

CentOS部署Harbor镜像仓库

程序员欣宸

Docker 10月月更 habor

数据湖(六):Hudi与Flink整合

Lansonli

10月月更 Hudi与Flink整合

让PHP跑在JVM上——JPHP_PHP_臧秀涛_InfoQ精选文章