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

时间:2013-01-31 22:14:52

标签: php memory include php-opcode

在优化站点内存时,我注意到内存消耗量的飞跃,同时包含大量用于特定目的的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”字符串等)。

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

1 个答案:

答案 0 :(得分:1)

显然就是这样。

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

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

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