深入理解PHP的GC(Garbage collection)问题「建议收藏」

深入理解PHP的GC(Garbage collection)问题

大家好,又见面了,我是全栈君。

一.常见性能问题分类

深入理解PHP的GC(Garbage collection)问题「建议收藏」

class ClassA
{
    public $pro;
}

function foo()
{
    // 堆:堆上内存跟函数生命周期没关系,函数结束后仍然占内存,堆上垃圾自动释放
    // 栈:函数结束后内存释放掉

    //java: 分带回收
    //php; 引用计数
    $i = 100000;
    while ($i--) {
        $var = new ClassA();
        $var->pro = $var;
        unset($var);
    }
}

function foo2(){
    for ($a=1;$a<100000;$a++){
//        gc_disable();//停用循环引用收集器
        $var2=new ClassA();
        $var2->pro=$var2;
        unset($var2);
    }
}
foo2();

1.什么是垃圾回收?什么是循环引用?

循环引用:自己引用自己,

堆栈:两种内存的管理方式,

PHP的gc是用来解决循环引用内存泄露问题的.

深入理解PHP的GC(Garbage collection)问题「建议收藏」

2.为什么说GC问题是避免不了的,什么又是无用GC,怎么发现/解决代码中存在的GC问题, GC又占用了多少CPU

(1)怎么发现/解决代码中存在的GC问题

深入理解PHP的GC(Garbage collection)问题「建议收藏」

(2)无用gc: 浪费cpu但没起任何作用, 代码中将变量$var 赋值给全局变量$_GLOBALS, $var 引用了计数为1,进入垃圾池中.

深入理解PHP的GC(Garbage collection)问题「建议收藏」

二.内存泄漏

1.内存泄漏分类

  • PHP内核层泄露: zend 引擎
  • PHP扩展层泄露: 常见, 常用valgrind检测c 语言的泄露
  • PHP代码层泄露

2.是所有程序员的噩梦,为什么FPM下没有内存泄漏一说

深入理解PHP的GC(Garbage collection)问题「建议收藏」

3.swoole 常见的内存泄露场景

请求生命周期内向全局变量对象( GLOBALS, 类的静态属性,函数的静态变量, 无法结束的函数的局部变量 )赋值并且在请求结束后没有unset释放掉,就会造成内存泄露.

4.

深入理解PHP的GC(Garbage collection)问题「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/111536.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • hashmap put过程面试_面试时问你base在哪儿

    hashmap put过程面试_面试时问你base在哪儿一个HashMap能跟面试官扯上半个小时关注安琪拉的博客1.回复面试领取面试资料2.回复书籍领取技术电子书3.回复交流领取技术电子书前言HashMap应该算是Java后端工程师面试的必问题,因为其中的知识点太多,很适合用来考察面试者的Java基础。开场面试官:你先自我介绍一下吧!安琪拉:我是安琪拉,草丛三婊之一,最强中单(钟馗不服)!哦,不对,串场了,我是**,目…

  • int和int32的区别_int是多少位的

    int和int32的区别_int是多少位的大家有没有写了很久代码,还不知道这个Int8,Int16,Int32,Int64有什么区别呢?或者是为什么后面的数字不一样呢?初步了解了一下,才清楚这个东西。先来扫盲一下计算机存储单元,  在计算机内部,信息都是釆用二进制的形式进行存储、运算、处理和传输的。信息存储单位有位、字节和字等几种。各种存储设备存储容量单位有KB、MB、GB和TB等几种计算机的基本的存储单元有:…

  • JavaScript算法题整理

    JavaScript算法题整理1.获得两个数相除的商和余数console.log(10/3);//商:3.3333console.log(10%3);//余数:1//获得两个数相除的商和余数console.log(Math.floor(10/3));//13//Math.floor(向下取整)、Math.ceil(向上取整)、round(四舍五入)console.log(0.1+0.2);//在js中,尽量避免做小数点运算//如果有小数位的运算varsum=(0.1*100+0.2*100)/100;c

  • 蒙特卡洛方法学习(一)[通俗易懂]

    蒙特卡洛方法学习(一)[通俗易懂]转载:http://www.ruanyifeng.com/blog/2015/07/monte-carlo-method.html蒙特卡罗方法是一种计算方法。原理是通过大量随机样本,去了解一个系统,

  • 运维架构图[通俗易懂]

    运维架构图[通俗易懂]

  • jmeter参数化的三种方式[通俗易懂]

    jmeter参数化的三种方式[通俗易懂]通过添加前置处理器(用户参数)通过csv参数化通过函数助手

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号