【发布时间】:2017-02-06 00:20:38
【问题描述】:
当我做基准测试时,我发现 PHP 7 使用的内存比 PHP 5.6 多。
所以,我做了一个测试。我运行的脚本仅包含:
$a=10;
以下是我在没有任何模块的情况下使用 PHP CLI 时使用的内存的结果 (php -n)
php 5.6 = 222600 Bytes
php 7.0 = 350448 Bytes
* 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
环境是
- 操作系统:窗口 10
- 服务器:IIS(虽然我使用的是 CLI,而不是服务器),具有快速 cgi
- 机器:64 位
- php-5.6.23-nts-Win32-VC11-x64
- php-7.0.9-nts-Win32-VC14-x64
谁能解释我为什么得到这个结果?
附加测试
按照@gordon 的建议使用此代码,
$i=0;
while ($i++ < 100000) ;
php 5.6:227408 字节
php 7.0:386640 字节
我用这段代码确定了内存使用情况:
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();
【问题讨论】:
-
您是否使用一些实际代码对其进行了基准测试?即使一个或多或少的空脚本多消耗 100k 也不能告诉我们这在“真实”场景中是否属实。知道哪个更有趣..
-
也许可以,但是您在此处给出的示例是人为的,而且毫无意义。如果您想知道为什么您的应用程序会消耗更多内存,请将其作为有关应用程序详细信息的问题。分析您的应用程序。问题的表述方式现在暗示 PHP7 一般会占用更多内存。这是一个有害的建议,因为人们会阅读它并将其视为裸币(毕竟,它是在 Stack Overflow 上编写的),而实际上,PHP7 为减少内存使用做了许多改进。例如见nikic.github.io/2014/12/22/…
-
嗯,不同版本的stem根本不同,更高级的PHP版本体积也更大也就不足为奇了。不仅如此,Zend Engine 版本不同,甚至编译它们的 VC 版本也不同。到目前为止,这里没有什么意外的,问题是,它是否也会根据脚本的大小呈指数增长,或者差异仍然相似?这么小的代码很难确定。
-
您怎么知道 PHP 7 不仅效率更高,而且使用更多内存,因为它更快且可用?即它试图帮助你。很明显,您没有设置任何内存限制。所以你在抱怨不同 PHP 版本的默认行为?
-
抱歉,我没有正确阅读您的价值观。您是正确的,这些值小于 1 MB。我怀疑您所看到的只是 PHP 在启动时所具有的“内务管理默认值”。我怀疑当您开始分配大型数组或大量对象时,内存使用会更有意义。即数十万的条目。然后您应该会看到 PHP 7 更“高效”。即相同数据结构的内存更少。
标签: php php-internals