PHP7.1_新特性

變量類型

PHP7版本函數的參數和返回值增長了類型限定。
緣由:爲了PHP7.1版本JIT特性作準備,增長類型以後PHP, JIT能夠準確判斷變量類型,生成最佳的機器指令。php

function test (int $a, string $b, array $c) :int {
    // code
}

錯誤異常

PHP程序出錯後,過去Zend引擎會發生致命錯誤並終止程序運行,PHP7能夠使用try/catch捕獲錯誤。html

try {
    no_func();
} catch (EngineException $e) {
    echo "Exception: {$e->getMessage()}\n";
}

性能優化

zval使用棧內存

在Zend引擎和擴展中,常常要建立一個PHP變量,底層就是一個zval指針。以前的PHP版本都是經過MAKE_STD_ZVAL動態的從堆上分配一個zval內存。而PHP7能夠直接使用棧內存.算法

PHP5數組

zval *val; MAKE_STD_ZVAL(val);

PHP7性能優化

zval val;

做用:節省一次內存分配和管理.php7

zend_string存儲hash值,array查詢不須要重複計算hash

PHP7爲字符串單首創建了新類型叫作zend_string,除了char*指針和長度以外,增長了一個hash字段,用於保存字符串的hash值。數組鍵值查找不須要反覆計算hash值函數

struct _zend_string {
    zend_refcounted gc;
    zend_ulog h;
    size_t len;
    char val[1]
}

優化數組的鍵值查找的性能。性能

hashtable桶內直接存數據,減小了內存申請次數,提高了Cache命中率和內存訪問速度
zend_parse_parameters改成 實現,性能提高5%
新增長4中OPCODE, call_user_funciton, is_int/string/array, strlen, defeind 4個函數變爲 PHP OpCode指令
其它性能優化,基礎類型int,float,bool等改成直接進行值拷貝, 排序算法改進PCRE with JIT, execute_dataopline使用全局寄存器使用gdb4.8的PGO功能
PHP7與JIT

PHP7.0-final版本沒有攜帶JIT特性優化

JIT是just in time 的縮寫,表示運行時將指令轉爲二進制機器碼。
對於計算密集型的程序,JIT能夠將PHP的OpCode直接轉換爲機器碼,大幅提高性能。指針

參考文檔

相關文章
相關標籤/搜索