包含期间的 PHP 操作码占用内存



在优化内存站点时,我注意到内存消耗的飞跃,同时包含大量用于特定目的的PHP类文件(600+)。拆开这些,我注意到包含一个PHP文件(因此可能编译为操作码)比磁盘上的文件大小占用大约50倍的内存。

在我的情况下,磁盘上的文件大小约为 800 kB(带有缩进和注释、纯类声明、字符串不多),但是在包含所有文件后,内存消耗高出约 40 MB

我像这样测量(PHP 5.3.6):

echo memory_get_usage(), "<br>n";
include($file);
echo memory_get_usage(), "<br>n";

在 600 个文件的循环中,我可以看到内存消耗从基本上为零增长到 40 MB。(没有自动加载器加载附加类,或任何立即执行的全局代码或构造函数代码,它实际上只是纯包含。

这是正常行为吗?我假设操作码比纯源代码更紧凑(去掉所有空格和注释,或者例如只有一个或两个指令字节而不是"foreach"字符串等)?

如果这是正常的,有没有办法优化它?(我认为使用操作码缓存只会节省编译时间,而不是实际的内存消耗?

显然就是

这样。

我从头开始重新测试了这一点:

  • 包括一个空的零长度文件:784字节内存消耗增加
  • 包括一个空的类 X { } 定义:2128 字节
  • 包含一个空方法的类:2816 字节
  • 包括一个具有两个空方法的类:3504 字节

在所有测试中,包含文件的文件大小都小于 150 字节。

最新更新