写点什么

让 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:575247
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

Nginx通过split_client实现客户端分流

运维研习社

nginx 灰度发布 5月日更 分流

量化网格交易策略系统,马丁倍投策略软件源码

通过实践带你揭开TCP中CLOSE_WAIT和TIME_WAIT的神秘面纱

linux大本营

c++ Linux TCP 网络协议 epoll

深入Linux C/C++ Timer定时器的实现核心原理

Linux服务器开发

Linux 后端 网络编程 定时器 Linux服务器开发

ceph-csi源码分析(7)-rbd driver-IdentityServer分析

良凯尔

Kubernetes 源码分析 Ceph CSI

用Python找出100以内的质数 - DAY6

Qien Z.

5月日更 ptyhon 找质数 质数

全国大学生物联网设计竞赛(华为杯)巡回技术讲座“八校联动”,HarmonyOS与校园开发者面对面

Geek_283163

鸿蒙

服务调用链相关基础知识

luojiahu

调用链

聊聊Spring的XML Schema扩展机制的使用方式

Hex

spring

Android设备实时音视频传输有效方案

小驰笔记

android 音视频 引航计划

全文检索的介绍

五分钟学大数据

大数据 5月日更

全国大学生物联网设计竞赛(华为杯)巡回技术讲座“八校联动”,HarmonyOS与校园开发者面对面

科技汇

k8s POD hosts 文件怎么与主机保持同步那?

Geek_f24c45

Docker Kubernetes

消息队列系统架构设计

王硕

架构训练营

Spark为什么会流行

大数据技术指南

大数据 5月日更

打破思维定式(十)

Changing Lin

20个不良用户体验

老猿Python

程序员 用户体验 程序开发

区块链—重构新商业体系和全新商业生态环境

CECBC

ceph-csi源码分析(8)-cephfs driver分析

良凯尔

Kubernetes 源码分析 Ceph CSI

数据挖掘从入门到放弃(二):决策树

数据社

机器学习 5月日更

[Netty]- Reactor实现

topsion

reactor Netty io nio

APP透露的焦虑

wgc

杂谈

Python-XPath

若尘

Python编程 5月日更

iOS 面试策略之系统框架-UIScrollView及其子类

iOSer

ios 面试 UIScrollView UICollectionView

花一周整理!Python全系列学习资料,全是干货

Python研究者

数据科学指南#基础篇 Bokeh入门

Lev

Python 学习 数据分析 数据科学

腾讯iOS开发要达到咋样的水准?

一意孤行的程序员

ios 程序员 腾讯 面试 ios开发

网络攻防学习笔记 Day15

穿过生命散发芬芳

5月日更 网络攻防

企业数字化转型分为三个阶段

石云升

数字化 5月日更

把Redis当作队列来用,真的合适吗?

Kaito

数据库 redis 队列

工业互联网产业数字化,区块链如何协同发力?

CECBC

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