PHP7からメモリマネージャが一新されます。これはDmitryが新規に書いたもので、masterブランチには2014-08-26に取り込まれています。
https://github.com/php/php-src/pull/777 に性能比較が書いてあるんですが、アプリケーションによっては5%から10%の性能アップとなっており、すごい成果だといえるでしょう。
概要
内容についてどうこう言えるほどの知識は無いのですが、Zend/zend_alloc.c
の先頭に次のようなコメントがありました。「jemallocやtcmallocからアイデアをもらった」だそうで、最近の速いmalloc実装と同等の実装を行ったということのようですね。
/*
* zend_alloc is designed to be a modern CPU cache friendly memory manager
* for PHP. Most ideas are taken from jemalloc and tcmalloc implementations.
速度の比較
開発最新版のPHPでは、環境変数USE_ZEND_ALLOCを0に設定することで新規実装したmallocを使わず、システムが提供するmallocを使うことができます。
この両者の性能を実際に比較してみましょう。下記はMacOSX 10.9.5(Mavericks)上での結果です。
$ php -v
PHP 7.0.0-dev (cli) (built: Oct 1 2014 18:09:49)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.8.0-dev, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
$ php Zend/bench.php
simple 0.093
simplecall 0.025
simpleucall 0.054
simpleudcall 0.058
mandel 0.263
mandel2 0.327
ackermann(7) 0.074
ary(50000) 0.008
ary2(50000) 0.010
ary3(2000) 0.120
fibo(30) 0.175
hash1(50000) 0.017
hash2(500) 0.018
heapsort(20000) 0.071
matrix(20) 0.067
nestedloop(12) 0.155
sieve(30) 0.043
strcat(200000) 0.010
------------------------
Total 1.587
$ USE_ZEND_ALLOC=0 php Zend/bench.php
simple 0.093
simplecall 0.030
simpleucall 0.059
simpleudcall 0.057
mandel 0.264
mandel2 0.326
ackermann(7) 0.082
ary(50000) 0.008
ary2(50000) 0.007
ary3(2000) 0.119
fibo(30) 0.186
hash1(50000) 0.027
hash2(500) 0.018
heapsort(20000) 0.062
matrix(20) 0.063
nestedloop(12) 0.157
sieve(30) 0.048
strcat(200000) 0.023
------------------------
Total 1.629
テスト内容によって差はありますが、新しいmallocの方が総じて速いと言えそうです。