深入理解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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • scrapy+xpath爬取不可描述网站[通俗易懂]

    scrapy+xpath爬取不可描述网站[通俗易懂]今天来爬一个让人很有动力的网站,网址就不便放上来了,看看有没有有缘人能得知了还是先来items.pyimportscrapyclassAvmooItem(scrapy.Item):#definethefieldsforyouritemherelike:#name=scrapy.Field()name=scrapy.Field()

    2022年6月14日
    39
  • Apache安装配置(Windows和Linux)-有手就行[通俗易懂]

    Apache安装配置(Windows和Linux)-有手就行[通俗易懂]Apache详细安装配置图解,包括Windows和Linux系统,有手就行。

    2022年7月14日
    16
  • ubuntu系统安装VMware Tools安装详细过程

    ubuntu系统安装VMware Tools安装详细过程转载出处https://blog.csdn.net/u013142781/article/details/50539574 猿友们都知道linux不太好用,如果你想将你主机Windows上的文件或安装包放到虚拟机上,VMwareTools是必不可少的工具。1、打开虚拟机VMwareWorkstation,启动Ubuntu系统,菜单栏-虚拟机-安装VMwareTools,不启…

    2022年5月26日
    52
  • 基于FPGA的语音合成技术

    基于FPGA的语音合成技术1 问题描述 首先 按照课题要求 音乐的合成主要有几种频率 这里我们设置如下几组频率 在实际情况下 可以进行扩充 Fc 261 63 CFd 293 66 DFe 329 63 EFf 349 23 FFg 392 GFa 440 AFb 493 88 B 在 FPGA 中 取整数 进行四舍五入的选择 2 部分程序 这个模块如下所示 3 仿真结论 这个

    2025年11月15日
    4
  • datagrip2021 最新激活码破解方法

    datagrip2021 最新激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    263
  • python psutil替代_python psutil

    python psutil替代_python psutil1、CPU1psutil.cpu_times(percpu=False)返回cpu使用时间元祖。若percpu=True,返回各个CPU的使用情况列表。1psutil.cpu_percent(interval,percpu)#返回CPU利用率2psutil.cpu_times_percent(interval=None,percpu=False)3psutil.cpu_count(lo…

    2022年6月7日
    29

发表回复

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

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