php 字节码查看,为什么PHP在Java编译为字节码文件时使用操作码caching?

PHP不使用操作码的标准机制。 我希望它坚持一个堆栈VM(Python,Java)或注册虚拟机(x86,perl6等)。 但它使用的东西绝对是本土的,而且在于蹭。

它使用内存中的连接列表,导致每个操作码具有 – > op1 – > op2和 – >结果。 现在每一个都是常量或临时表中的条目等这些指针不能以任何理智的方式序列化。

现在,人们已经完成了使用像pecl / bcompiler这样的项目,它将stream转储到磁盘中。

但是这些类更加复杂,这意味着有可能的代码片段

if() { class XYZ() { } } else { class XYZ() { } } class ABC extends XYZ {}

这意味着只有在运行时才能完成大量关于类和函数的决定 – 像Java这样的东西会在两个同名的类中窒息,而这两个类是在运行时有条件地定义的。 基本上,APC的inheritance和类caching代码可能是代码库中最复杂和最容易出错的部分。 每当一个类被caching时,所有父inheritance的成员必须在保存到操作码caching之前被清理掉。

指针问题不是无法克服的。 有一个apc_bindump,我从来没有打算修复每当重新启动完成,直接从磁盘加载整个caching项。 但是debugging所有的东西仍然需要定位所有的系统指针是很痛苦的–apache的情况太简单了,因为所有的php进程都有相同的系统指针,因为fork的行为。 旧的fastcgi版本比较慢,因为他们以后先用fork&init php – php-fpm用相反的方法修复。

但最终,PHP中真正缺less的是发明字节码格式的意愿,抛弃当前引擎和所有模块 – 使用堆栈虚拟机重写它并构buildJIT。 我希望我有时间 – fb家伙几乎在他们的嘻哈HHVM。 其中牺牲eval()更快的performance – 这是一个公平的牺牲:)

PS:我是没有时间正确更新APC 5.4的人

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值