文档章节

HHVM是什么东东

Zero风来
 Zero风来
发布于 2017/07/01 16:50
字数 815
阅读 12
收藏 0

HHVM (HipHop Virtual Machine)会将PHP代码转换成高级别的字节码(通常称为中间语言)。然后在运行时通过即时(JIT)编译器将这些字节码转换为x64的机器码。在这些方面,HHVM十分类似于C#的CLR和Java的JVM

历史
  早在2008年Facebook就开始使用HipHop(现在成为HPHP),这是一种PHP执行引擎;最初是为了将Fackbook的大量PHP代码转成C++,以提高性能和节约资源。最初的版本成为HPHPc,是一个PHP到C++的编译器。
  之后的两年里,Facebook又向HipHop中增加了HPHPi和HPHPd,HPHPi其实就是开发版的HPHP,HPHPd则是HipHop的调试器。通过HPHPd开发人员可以单步调试运行在HipHop平台上的PHP代码。
  使用HipHop的PHP代码在性能上最大可以是原生的6倍。但是,第一版的HipHop有不少缺点,具体如下:
  HPHPc 无法完全支持PHP的所有特性,最典型的是无法支持create_function()和eval()两个函数。但老实说,不支持后一个函数我不觉得是件坏事。
  Facebook的开发者不得不维护两种不同的引擎(HPHPc和HPHPi),这直接导致了重复劳动和资源浪费。
  最后,HPHPc部署步骤繁杂,这点很让PHP开发者头疼。.
  在2010年初,Facebook因为这些问题做出了2个重大的决定。首先是将HipHop平台开源,通过这种方式来加快HipHop的发展。
  其次,Facebook开始开发HipHop的更高版本,也就是HHVM(HipHop虚拟机),HHVM加强了HPHPc的健壮性,同时还修复了许多重要错误。
  HHVM是在HPHPc的基础上构建,它会将PHP代码转换成高级别的字节码(一种中间语言),在运行时即时(JIT)编译器会将这些字节码翻译成机器码。
  下面是一些关于字节码、机器码和即时(JIT)编译器的概念,快速的浏览以下概念,可以清楚这些概念在HHVM所处的角色。
  字节码:是一种人类无法阅读的代码,专门用来给编译器高效执行的。当HHVM首次加载项目时,它会将所有的PHP代码转换成字节码;字节码的生成是与平台无关的。
  机器码:是一系列供CPU执行的指令。用过汇编的都应该清楚机器码,估计没人喜欢用汇编编程。通过编译器就可以把汇编转成机器码,然后供CPU处理。
  JIT(即时)编译器:即时编译是种软件优化技术,指在运行时才会去编译字节码。字节码会存放在内存中,然后JIT编译器会根据需要加载并编译所涉的字节码。
  通过以上技术,HipHop和HHVM获得了性能的提升。
  最近,HHVM几乎已经完全支持PHP 5.4了,但还是有不少bug,所以不是所有应用程序都可以运行。因此,Facebook准备让最流行的20个开源PHP项目能够运行在HHVM上。第一个已经支持的项目就是Wordpress。[1] 

© 著作权归作者所有

Zero风来
粉丝 0
博文 6
码字总数 1068
作品 0
佛山
私信 提问
有关hhvm的问题 希望帮忙解答

有关hhvm的问题 希望帮忙解答 我编译安装 hhvm以后运行 执行文件后提示 hhvm: free(): invalid next size (fast): 0x0000000012f5a9e0 *** hhvm 内存泄漏了 具体找不到什么位置 这个是什么原...

开源铣加工
2015/12/08
150
1
HHVM 是如何提升 PHP 性能的?

背景 HHVM 是 Facebook 开发的高性能 PHP 虚拟机,宣称比官方的快9倍,我很好奇,于是抽空简单了解了一下,并整理出这篇文章,希望能回答清楚两方面的问题: HHVM 到底靠谱么?是否可以用到产...

HenryChan
2014/04/02
35
0
hhvm shell脚本问题

hhvm自带的脚本不工作,现在自行修改,大家帮忙看下。 start,stop单独运行的话是没有问题的。 restart参数修改以后现在是没法启动的: /etc/init.d/hhvm restart Shutting down hhvm: Kille...

_jerryjee
2015/06/20
231
1
在 Ubuntu 上配置高性能的 HHVM 环境

HHVM全称为 HipHop Virtual Machine,它是一个开源虚拟机,用来运行由 Hack(一种编程语言)和 PHP 开发应用。HHVM 在保证了 PHP 程序员最关注的高灵活性的要求下,通过使用最新的编译方式来取...

酱醋茶丶
2015/10/21
155
0
PHP历史之4-不得不说细说的FB娇子---HHVM

HHVM安装使用教程-高效的PHP运行环境提升PHP性能9倍以上 HHVM即HipHop Virtual Machine,目前是3.0版本,出自Facebook,它先将PHP和Hack程序编译为中间字节码,然后通过just-in-time (JIT)...

ccpit2b2c
2017/07/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MongoDB系列-在复制集(replication)以及分片(Shard)中创建索引

关注我,可以获取最新知识、经典面试题以及微服务技术分享   在使用MongoDB时,在创建索引会涉及到在复制集(replication)以及分片(Shard)中创建,为了最大限度地减少构建索引的影响,在副本...

ccww_
26分钟前
18
0
SAP HANA数据库multi container模式JDBC链接connection refused

报错如下信息 com.sap.db.jdbc.exceptions.JDBCDriverException: SAP DBTech JDBC: Cannot connect to jdbc:sap://xxx.xxx.xxx.xxx:30015 [Cannot connect to host xxx.xxx.xxx.xxx:30015 [C......

flash胜龙
51分钟前
37
0
c++ 虚基类

c++ 虚基类 p556

天王盖地虎626
57分钟前
93
0
k8s删除Terminating状态的命名空间

背景: 我们都知道在k8s中namespace有两种常见的状态,即Active和Terminating状态,其中后者一般会比较少见,只有当对应的命名空间下还存在运行的资源,但是该命名空间被删除时才会出现所谓的...

Andy-xu
今天
85
0
seata源码阅读笔记

seata源码阅读笔记 本文没有seata的使用方法,怎么使用seata可以参考官方示例,详细的很。 本文基于v0.8.0版本,本文没贴代码。 seata中的三个重要部分: TC:事务协调器,维护全局事务和分支...

东都大狼狗
今天
48
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部