HHVM (HipHop Virtual Machine)會將PHP代碼轉換成高級別的位元組碼(通常稱為中間語言)。然後在運行時通過即時(JIT)編譯器將這些位元組碼轉換為x64的機器碼。在這些方面,HHVM十分類似於C#的CLR和Java的JVM
基本介紹
- 中文名:HipHop虛擬機
- 外文名:HHVM
- 全稱:HipHop Virtual Machine
- 開發公司:Facebook
- 支持語言:HACK、PHP
歷史
早在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。
早在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。