gpt4 book ai didi

php - PHP 是否根据其限制动态处理内存使用情况?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:41:44 24 4
gpt4 key购买 nike

当 PHP 的 memory_limit 设置为 50M 时,我有一个脚本在大约 25 秒的运行时成功运行。当我在脚本末尾打印 memory_get_peak_usage 时,它非常接近 50M。当我将 memory_limit 设置得更高,到 90M 时,memory_get_peak_usage 显示大约 75M 并且脚本加载速度大约快 10 秒。

不管 memory_limit 是多少,脚本都会使用大约相同数量的内存,这似乎很直观,但事实似乎并非如此。如果一个脚本在 50M 的限制下达到 50M 以下,我预计即使 memory_limit 增加了,峰值使用量也会相同。

我唯一的解释是 PHP 认识到它接近极限并花时间清除未使用的内存以避免达到极限。这是它实际的工作方式还是我只是触及了更大的东西的表面?

最佳答案

您看到的是垃圾收集器在执行它的工作。

当您重新定义一个非原始变量值时,旧值不会立即从内存中丢弃。它保留在那里,作为脚本内存使用的一部分。

只有当您的脚本危险地接近其内存限制时,才会调用垃圾收集器来清理那些未使用的已分配内存,以便为脚本释放更多空间。这个过程很缓慢,这就是为什么脚本在内存越大的情况下运行得越快的原因——垃圾收集器不需要那么频繁。

编辑:

缓冲也参与其中。如果您的脚本正在将大量数据写入文件,则这些数据首先在内存中排队,因为您的硬盘将无法像您生成数据那样快地写入这些数据。如果您生成数据的速度比磁盘写入数据的速度快得多,最终可用内存将被填满,您的程序将在您下次尝试 fwrite() 或使用任何函数时被迫等待数据放入缓冲区。

关于php - PHP 是否根据其限制动态处理内存使用情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15726282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com