現在の位置: ホーム> 最新記事一覧> GC_MEM_CACHES関数は、GC_COLLECT_CYCLES関数と組み合わせて使用​​され、メモリリサイクル効率を改善します

GC_MEM_CACHES関数は、GC_COLLECT_CYCLES関数と組み合わせて使用​​され、メモリリサイクル効率を改善します

gitbox 2025-06-18

PHPのゴミ収集メカニズムでは、 GC_MEM_CACHESGC_COLLECT_CYCLESは2つの非常に重要な機能です。それらを合理的に使用すると、メモリリサイクル効率を大幅に改善し、メモリリークリスクを減らし、プログラムのパフォーマンスを最適化できます。この記事では、これら2つの機能と組み合わせてメモリ管理を実装するための機能、使用方法、およびベストプラクティスを詳細に紹介します。


1。ごみリサイクルの基本

PHPでは、Garbage Collection(GC)は、メモリの漏れを防ぐためにもはや言及されていない変数とオブジェクトを自動的にリサイクルする責任があります。 PHPは参照カウントメカニズムを介して変数を追跡しますが、循環参照(2つ以上のオブジェクトが互いを参照)の場合、単純な参照カウントをリサイクルできず、ゴミ収集メカニズムが必要です。


2。GC_COLLECT_CYCLES関数

GC_COLLECT_CYCLES()は、ガベージコレクションを積極的にトリガーするPHPによって提供される関数です。円形の参照によって生成されたすべてのガベージをスキャンしてリサイクルします。

効果:

  • すべての円形の参照メモリをリサイクルしようとして、完全なごみ収集サイクルを実行します。

  • リサイクルされたループの数を返します。

サンプルコード:

 <?php
// 円形の参照例を作成します
class A {
    public $b;
}
class B {
    public $a;
}

$a = new A();
$b = new B();
$a->b = $b;
$b->a = $a;

// ガベージコレクションを積極的にトリガーします
$collected = gc_collect_cycles();
echo "リサイクル $collected 参照メモリ\n";
?>

3。GC_MEM_CACHES関数

GC_MEM_CACHES()関数は、ガベージコレクション内のキャッシュをクリーンアップしてメモリを解放するために使用されます。これらのキャッシュは通常、ゴミ収集中に生成される一時的なデータ構造です。

効果:

  • ガベージコレクターの内部キャッシュをクリーンアップし、余分なメモリを解放します。

  • リサイクル参照は積極的にリサイクルされず、キャッシュされたデータのみがリリースされます。

サンプルコード:

 <?php
// 掃除 GC キャッシュ,無料のメモリ
gc_mem_caches();
echo "已掃除垃圾回收キャッシュ\n";
?>

4。共同使用の利点

PHPスクリプトの実行では、 GC_COLLECT_CYCLES()を呼び出すだけで、円形の参照メモリをリサイクルできますが、ガベージコレクションキャッシュはまだ存在し、余分なメモリを取り上げます。この時点で、 GC_MEM_CACHES()がすぐに呼び出された場合、これらのキャッシュをリリースしてメモリの使用量をさらに減らすことができます。

推奨される使用法:

 <?php
// ゴミコレクションをトリガーします
$collected = gc_collect_cycles();
echo "リサイクル $collected リサイクルリファレンス\n";

// 掃除 GC キャッシュ,余分なメモリを解放します
gc_mem_caches();
echo "垃圾回收キャッシュ已掃除\n";
?>

5。実際のシナリオと組み合わせた

たとえば、長期にわたるPHPスクリプト(Daemons、CLIスクリプト、タスクキューワーカーなど)は、メモリの使用量が高く、循環参照が発生しやすいです。これら2つの機能を定期的かつ積極的に呼び出すことをお勧めします。

例:

 <?php
while (true) {
    // ビジネスロジックをシミュレートします
    do_something();

    // 定期进行垃圾回收和キャッシュ掃除
    $collected = gc_collect_cycles();
    gc_mem_caches();

    echo "リサイクル $collected リサイクルリファレンス,キャッシュ已掃除\n";

    // 寝る,過度の使用を防ぎます CPU
    sleep(10);
}
?>

6。概要

  • GC_COLLECT_CYCLES()は、参照されるメモリをリサイクルするために使用されます。

  • GC_MEM_CACHES()は、ガベージコレクターの内部キャッシュをクリーンアップするために使用されます。

  • 組み合わせで使用すると、より効果的にメモリを自由に解放し、メモリの漏れと膨満感を減らすことができます。

  • 長期にわたるスクリプトでは、これらの2つの関数を合理的に呼び出すことで、メモリを安定させるのに役立ちます。

これら2つの機能をマスターして正しく使用すると、PHPプログラムのメモリ回復効率を大幅に改善し、アプリケーションのパフォーマンスと安定性を確保できます。


PHPガベージコレクションメカニズムについて詳しく知りたい場合は、次のことをご覧ください。

https://gitbox.net/manual/en/function.gc-collect-cycles.php
https://gitbox.net/manual/en/function.gc-mem-caches.php