ホームページ >バックエンド開発 >Python チュートリアル >Python のメモリ管理メカニズムとは何ですか?

Python のメモリ管理メカニズムとは何ですか?

(*-*)浩
(*-*)浩オリジナル
2019-06-26 16:16:196612ブラウズ

言語メモリ管理は言語設計の重要な側面です。これは言語のパフォーマンスを決定する重要な要素です。 C 言語での手動管理であれ、Java でのガベージ コレクションであれ、それらは言語の最も重要な機能となっています。ここでは、動的に型付けされたオブジェクト指向言語のメモリ管理方法を説明するために、Python 言語を例に挙げます。

Python のメモリ管理メカニズムとは何ですか?

一文で要約: 参照カウントが主で、マークのクリアリングが、世代別リサイクルは補助的です。(推奨学習: Pythonビデオチュートリアル)

Python のガベージ コレクション (3 種類)

参照カウント

Whenオブジェクト 参照カウンタが 0 に達すると、オブジェクトはメモリ内に存在する可能性がありますが、アクセスできなくなります。 Python のガベージ コレクション中は他の操作は実行できません。参照カウントが 0 になったときに Python がオブジェクトをリサイクルする場合、明らかに Python の効率は非常に悪くなります。では、Python はいつオブジェクトをリサイクルするのでしょうか?これは良い質問です。

Python は、作成した新しいオブジェクトの数と、オブジェクトの参照カウンターが 0 になったオブジェクトの数を監視します。2 つの値の差がしきい値と比較され、しきい値より大きい場合、メモリはゴミになり始めます。リサイクルすると、参照カウンタが 0 のオブジェクトが破棄されます。

長所: シンプルなリアルタイム パフォーマンス、短所: 参照カウントを維持するとリソースと循環参照が消費されます。

ジェネレーションリサイクル

効率化を図るため、何度もクリーニングを行ってもまだ残っているものが多くありますが、そのようなものはクリーニングする必要がないと考えられます。さまざまなコレクションに分割されており、各コレクションには異なるリサイクル間隔があります。簡単に言えば、これは Python の世代リサイクルです。

具体的には、Python のガベージは 1 世代、2 世代、3 世代に分かれており、第 1 世代のオブジェクトはリサイクルのたびにクリーンアップされ、クリーンアップ後に参照されたオブジェクトがまだ存在する場合は Enter になります。同様に、第 2 世代のコレクションがクリーンアップされたときに存在するオブジェクトは、第 2 世代のコレクションに入ります。

各収集の清掃時間の配分方法は、まず第一世代のごみを清掃します。第一世代のごみを 10 回清掃した後、第二世代のごみを 1 回清掃します。第二世代のごみが 1 回掃除された後、第 2 世代のごみを清掃します。 10回掃除すると第二世代のゴミも掃除されます。

Mark Clear

Allocate on Demand. メモリが十分でない場合は、プログラム スタック上のレジスタと参照から開始し、オブジェクトを走査して、マークされていないオブジェクトはメモリから消去されます。

Python 関連の技術記事の詳細については、Python チュートリアル 列にアクセスして学習してください。

以上がPython のメモリ管理メカニズムとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。