When I was doing a benchmark, I found that PHP 7 was using more memory than PHP 5.6.So, I did a test. I ran a script containing only:
$a=10;
and below are the results for the memory used when I used PHP CLI without any modules (php -n)
php 5.6 = 222600 Bytes
php 7.0 = 350448 Bytes
PHP configuration is
* PHP 5.6.23 (cli) (built: Jun 22 2016 12:13:15)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies* PHP 7.0.9 (cli) (built: Jul 20 2016 10:47:41) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
Environment is
OS: window 10
Server : IIS (although I used the CLI, not the server), with fast cgi
machine : 64 bitI was confused and wanted to know , why such thing happened. I did another test, with code
$i=0;
while ($i++ < 100000) ;
Below were the result.
php 5.6: 227408 bytes
php 7.0: 386640 bytes
I determined memory usage with this code:
echo PHP_EOL; echo "Memory Usage :".memory_get_usage(); echo PHP_EOL; echo "Real Memory Usage :".memory_get_usage(true); echo PHP_EOL; echo "Real Peak Memory Usage :".memory_get_peak_usage(true); echo PHP_EOL; echo "Peak Memory Usage :".memory_get_peak_usage();
I wanted to know, what has changed in PHP 7 and what would be the implication of that.
So ran another complicated OOPS code, with two classes and manipulation of object.
Then PHP 7 was far better than PHP 5.6
To understand that one needs to understand, how PHP5 and PHP7 allocates memory.
PHP5 allocating memory “By Request” assuming by it’s Zend Engine structure.
In PHP7 it’s some optimizations made at this side, so on memory allocating “by the chunks”
- On start it allocates large chunk of memory
- On in-app allocation it allocates small chunk to avoid fragmentation
This differences makes very good increasing of performance (because of engine don’t need allocate memory on runtime every time you need it and save some time on fragmentation), but it increases memory consumption for “very small” programs, which size is below than “chunk size”.
there are many good links here to read more internal about implementation
- Official PHP7/PHP-NG presentation: https://drive.google.com/file/d/0B3UKOMH_4lgBUTdjUGxIZ3l1Ukk/view
- Official PHP7/PHP-NG internal changes description: https://wiki.php.net/phpng-int
- Official extension migration guide: https://wiki.php.net/phpng-upgrading
- Good articles from @NikiC: http://nikic.github.io/2015/05/05/Internal-value-representation-in-PHP-7-part-1.html and http://nikic.github.io/2015/06/19/Internal-value-representation-in-PHP-7-part-2
- PHP5 internal details: http://www.phpinternalsbook.com/
- Badoo PHP5->PHP7 success story with details: https://techblog.badoo.com/blog/2016/03/14/how-badoo-saved-one-million-dollars-switching-to-php7/