深入理解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)
上一篇 2022年2月19日 上午9:00
下一篇 2022年2月19日 上午10:00


相关推荐

  • Say Hi to ERNIE!黑芝麻智能率先开展文心系列模型的技术合作

    Say Hi to ERNIE!黑芝麻智能率先开展文心系列模型的技术合作

    2026年3月12日
    4
  • OleDbCommand 的特点

    OleDbCommand 的特点OleDbCommand的特点在于以下对数据源执行命令的方法:ExecuteReader 执行返回行的命令。如果用ExecuteReader执行如SQLSET语句等命令,则可能达不到预期的效果。ExecuteNonQuery 执行SQLINSERT、DELELE、UPDATE和SET语句等命令。ExecuteScalar 从数据库中检索单个值(例如一个聚合值)。您

    2022年5月19日
    41
  • pycharm配置python运行环境_C中调用Python

    pycharm配置python运行环境_C中调用Python目录前言一、系统路径说明二、环境配置1.在VS中选择ReleaseX642.菜单栏中选择:项目->属性3.生成dll答疑python程序目录下没有Numpy路径?具体代码参考博客前言本文主要讲解在Python程序中调用C(C++)程序的方法。主要思路是:在VS中配置好环境后,将C语言程序打包生成动态库文件.dll。将.dll改名成.pyd之后,装入相应路径,在pycharm中直接import即可环境:win10Pycharm(python3.6)(64位)VS2017(社区版)

    2022年8月26日
    9
  • 回归直线方程「建议收藏」

    回归直线方程「建议收藏」回归直线方程线性回归方程的公式一个简单实现代码//************************************//函数名称:GetLineEquationDouble0//函数说明

    2022年8月3日
    9
  • 内部类与静态内部类的区别_禁止序列化非静态类的内部类

    内部类与静态内部类的区别_禁止序列化非静态类的内部类&nbsp;&nbsp;&nbsp;&nbsp;如果一个类中定义了静态成员变量和静态方法,那么静态方法可以访问静态成员变量,而无法访问非静态成员变量,并且静态成员变量和静态方法是随着类的加载而加载、非静态成员变量和方法的声明周期是由对象的声明周期控制的。&nbsp;&nbsp;&nbsp;&nbsp;静态内部类和非静态内部类同静态方法和非静态方法类似。为什么要使用内部类&nbsp;&n…

    2022年10月11日
    6
  • 生产环境中使用Cassandra(v0.6.1) 经验小结

    生产环境中使用Cassandra(v0.6.1) 经验小结

    2021年8月6日
    53

发表回复

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

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