PHPのガベージコレクションとは何ですか?それはパフォーマンスにどのような影響を与えますか?
この記事では、ガベージ コレクションについて紹介し、PHP のガベージ コレクション メカニズムを簡単に分析し、最後にガベージ コレクションがパフォーマンスに与える影響について説明します。
# 開発について少しでも学んだ学生なら、どのようなプログラミング言語であっても、変数はメモリに格納されることを知っていると思います。実際、私たち開発者は常にメモリを前後に操作しています。それに応じて、新しい変数を追加し続けると、メモリは増え続けます。良いメカニズムがなければ、メモリは際限なく増加し、最終的にはメモリがいっぱいになってしまいます。これによりメモリ リークが発生します。しかし、日常の開発においては、一度に大きなファイルをロードしない限り、メモリオーバーランエラーが発生することはほとんどなく、これがガベージコレクション機構の役割です。
ガベージ コレクションとは何ですか?
C 言語を使用する場合、メモリを解放するために手動で free を使用する必要があります。C 以降のほとんどのプログラミング言語には、ガベージ コレクションなどの独自の処理機能があり、これが今日のガベージです。私たちが話している収集メカニズムは GC とも呼ばれます。 GC 機能を備えた開発言語では、メモリをいつ解放するかを気にする必要はなく、これらの言語は既にメモリを解放しているため、この部分の内容を理解する必要さえありません。最下位レベルのメモリ解放の問題。
もちろん、この分野で最も有名なコンテンツは Java のガベージ コレクション メカニズムです。実際、PHP にも対応する処理メカニズムがあります。もちろん、多くの PHPer はこれに一度も触れたことがないかもしれません。この点については後で説明します。
PHP のガベージ コレクション アルゴリズム
前回の記事では、参照カウントの概念を紹介しました。 PHP5.3 より前の PHP のガベージ コレクション メカニズムは非常に単純で、refcount が 0 のすべての項目をクリーンアップしてリサイクルするもので、最下位レベルは空きでした。しかし、この方法では、参照カウントの記事で述べた循環参照の問題が発生し、この種の参照問題は通常のrefcountの判定では再利用できません。そのため、PHP5.3 より前では、循環参照によってメモリ リークが発生していました。
私がバージョンを強調する理由は、5.3 以降、PHP がガベージ コレクション アルゴリズムを改善し、この循環参照を解決したためです。 (もちろん、私たちは日々の開発においてこの種の循環参照の問題を回避するよう努めています)。具体的なアルゴリズムについては、公式画像を引用します。
公式ドキュメントに詳細な説明がありますが、それでも非常にわかりにくいです。このプロセスを簡単な言語 (人間の言語) を使って説明しましょう。
まず、ルート バッファーという概念があります。これは図のルートです。最下位レベルでは、一連の理解できないアルゴリズムを通じて、各変数の考えられる根を見つけることができます。 PHP は、変数の可能なルートをルート バッファーに入れます。
ルート バッファーがいっぱいの場合、デフォルト値は通常 10000 です。この値を変更するには、ソース コードを変更し、再コンパイルする必要があります。 PHP はガベージ コレクション メカニズムを開始し、ルート バッファーからの深度トラバーサル アルゴリズムに従って、この可能なルートに関連するすべての変数を見つけ、特定の可能なルートによって見つかった変数の refcount を 1 減らして、マークをマークします。現在のもの。「削減」。
その後、もう一度深くトラバースし、refcount が 0 でない場合は 1 を追加し、0 の場合は変更しないでください。
次に、ルート バッファー内のすべての可能なルートを、削除ではなくクリアします。次に、refcount を 0 にしてすべての変数の内容をクリーンにして解放します。
あなたはすでに混乱していますか?実際、私も非常に混乱しています。この段落がどのように書かれたのかさえわかりません....
いくつかの重要なポイントを覚えておくだけで、面接に対処し、ほとんどの人を即座に殺すことができます。
- PHP5.3 以降では、各変数の refcount が 0 であるかどうかを直接チェックしません。
- 使用されるアルゴリズムは深さトラバーサルです。ルート バッファーがあり、クリーンアップされます。それによると、特定のアルゴリズムには C とアルゴリズムのしっかりした基礎が必要です。ソース コードを学習するときに注意深く学習しましょう。
- 5.3 その後、アルゴリズムは循環参照の問題を解決しました。
- メモリ リーク値は一定の範囲内にとどまり、すぐに大規模なクラッシュが発生することはありません
ガベージ コレクションがパフォーマンスに及ぼす影響
As前述したように、ルート バッファがいっぱいになるとガベージ コレクションが発生し、すぐに実行されます。また、深さのトラバースが 2 回行われるため、必然的にパフォーマンスの消費が生じます。結局のところ、アルゴリズムの実行には時間がかかります。ただし、メモリ オーバーフローなどの壊滅的なエラーと比較すると、ガベージ コレクションによるパフォーマンスの低下は基本的に無視できます。
概要
実のところ、ガベージ コレクションについて覚えておく必要があるのは、いくつかの重要なポイントだけです。特定のコア アルゴリズムと内容については、さらに詳しく調べる必要があります。もちろん、それは私たちの研究の目的でもありますが、将来的にはソースコードの下部にある関連する内容にも必ず手を出していきますので、しばらくお待ちください。
推奨学習: 「PHP ビデオ チュートリアル 」
以上がPHPのガベージコレクションとは何ですか?それはパフォーマンスにどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
