编程

PHP 8.3 功能预览: gc_status() 返回额外的 GC 信息

1012 2023-03-31 03:27:00

PHP 的 gc_status() 函数返回垃圾回收器(GC)的统计信息,比如 GC 是否在运行、GC 是否被保护以及 缓冲区(buffer)的大小。在调试长时运行PHP应用检测和优化内存使用时,这些信息很有用。

var_dump(gc_status());

当前,gc_status 返回有 4 个 key 的数组:

FieldTypeDescription
runsIntegerGC 已运行的次数
collectedInteger已收集的对象个数
thresholdInteger缓冲区中用以触发 GC 的 root 数
rootsInteger当前缓冲区中 root 的数量

在 PHP 8.3 中,gc_status 函数将额外返回 4 个字段:

FieldTypeDescription
runningBoolean如果 GC 在运行中,则返回 true;否则返回 false 
protectedBoolean如果 GC 被保护,且禁止添加 root,则返回 true; 否则返回 false。 
fullBoolean如果 GC 犯冲区的大小超过 GC_MAX_BUF_SIZE(当前设为0x40000000,即= 1024³) 则返回 true
buffer_sizeInteger当前 GC 的缓冲区大小。

向下兼容性影响

PHP 8.3 中,gc_status 函数在返回的数组中返回了额外的字段。函数的签名不变、返回类型也不变,只引入了 4 个新字段。

鉴于该函数返回的是 PHP 内部 GC 数据,因此无法使用用户空间的 PHP 函数获得这些额外信息。因此在旧版的 PHP 中没办法实现这一更新。