• PHP Fatal error——内存用尽


    在做算法题时遇到了如下报错:

    计算:

    134217728 bytes = 131072 KB = 128M

    字面理解:

    允许的最大内存为128M,它们被用完了,所以代码不能跑了。

    官方说明:

    与本条error相关的是php.ini中的对memory_limit的设置。

    由官网给出的堆memory_limit的说明可以知道,php.ini中会通过对memory_limit的设置来限制赋予脚本的最大内存使用量。这样的设置,就是为了那些poorly written 的脚本消耗了服务器所有的可用内存。

    mdzz。。。原来我写的脚本属于poorly written脚本。哎,同志仍需努力!

    并且memory_limit 在php5.2.0之后默认值是128M。

    我们可以通过ini_set('memory_limit','256M');来更改内存限制,如果要无限制,则设置为-1.

    我果断设置了一波-1.然后,代码跑了好久好久好久。。。。。。。。。

    之后,才输出结果。所以,优化代码才是王道!

    补充:

    通过本文,我们知道了写代码得优化,得朝着“用尽可能少的时间,使用尽可能少的内存,求出最佳结果”。

    为了以后有效的评估时间、内存的消耗,有必要记住以下函数,用于统计脚本消耗的时间与内存:

     1 <?php
     2 $startTime = microtime(true);
     3 //脚本内容执行
     4 $endTime = microtime(true);
     5 $time = $endTime - $startTime;
     6 echo '脚本耗时:'.$time."
    ";
     7 echo '占用最大内存:'.memory_get_peak_usage()."
    ";
     8 echo '当前脚本使用的内存:'.memory_get_usage(). "
    "; 
     9 
    10 // To get the memory usage in KB or MB
    11 function convert($size)
    12 {
    13     $unit=array('b','kb','mb','gb','tb','pb');
    14     return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
    15 }
    16 
    17 echo convert(memory_get_usage(true)); // 123 kb
  • 相关阅读:
    arthas常用命令记录
    idea 的 http-client
    springboot 接口层参数校验 自定义参数校验
    Spring AOP 实现——使用annotation、pointcut、aspect
    Redis 热点名词
    SpringCloud注册发现配置
    【设计模式】-行为型-11-解释器模式
    【设计模式】-行为型-10-备忘录模式
    【设计模式】-创建型-9-访问者模式
    Kubernetes运行原理
  • 原文地址:https://www.cnblogs.com/jade640/p/6624948.html
Copyright © 2020-2023  润新知