深入理解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)问题「建议收藏」

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • js 数组转json和json转数组

    js 数组转json和json转数组js数组转json和json转数组数组转json串json字符串转数组数组转json串vararr=[1,2,3,{a:1}];JSON.stringify(arr);json字符串转数组varjsonStr='[1,2,3,{“a”:1}]’;JSON.parse(jsonStr);

    2022年6月21日
    28
  • linux获取时间戳_java时间戳转换成时间

    linux获取时间戳_java时间戳转换成时间转换成指定的日期格式,如“2021/08/2919:25:18‘:date-d@1630236318+”%Y/%m/%d%H:%M:%S”leon@ubuntu:~/work$date-d@1630236318+”%Y/%m/%d%H:%M:%S”2021/08/2911:25:18date-d@1630236318leon@ubuntu:~/work$date-d@1630236318Sun29Aug202111:25:18AMUTC…

    2022年10月2日
    0
  • QQFishing QQ钓鱼站点搭建

    QQFishing QQ钓鱼站点搭建答:为什么要写这个代码?当然不是做黑产去盗别人扣扣,也没有啥查看别人隐私信息的癖好,搭建该站点的适用对象为->使用社会工程学定向钓鱼攻击的安全渗透人员另外管理员界面后端写的很丑+很烂,除了我

    2022年7月2日
    31
  • python lasso回归分析_解析python实现Lasso回归「建议收藏」

    python lasso回归分析_解析python实现Lasso回归「建议收藏」Lasso原理Lasso与弹性拟合比较python实现importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.metricsimportr2_score#defmain():#产生一些稀疏数据np.random.seed(42)n_samples,n_features=50,200X=np.random.ran…

    2022年6月1日
    40
  • 面试压力测试题情景题_压缩弹簧经常使用会发生什么

    面试压力测试题情景题_压缩弹簧经常使用会发生什么题解状态压缩dp,f[i][j]代表第i行状态为j的方案数#include<bits/stdc++.h>using namespace std;#define x first#define y second#define send string::npos#define lowbit(x) (x&(-x))#define left(x) x<<1#define right(x) x<<1|1#define transformu(s) tr..

    2022年8月8日
    2
  • vue集成activiti工作流_vue 异步渲染

    vue集成activiti工作流_vue 异步渲染一、安装px2rem-loadernpminstallpx2rem-loader二、配置build文件夹下utils.js,找到generateLoaders 修改如下配置constpx2remLoader={loader:’px2rem-loader’,options:{remUnit:75//设计稿宽度/10}…

    2025年7月4日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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