メモリ管理はコンピュータサイエンスの複雑な分野であり、その効率を向上させるために現在多くの技術が開発されています。
ここに写真の説明を挿入
メモリ管理は通常3つの領域に分けられますが、その区別は少しあいまいです。
メモリ管理の基本的な問題は、メモリに含まれるデータをいつ保持し、メモリを再利用できるようにいつ破棄するかを知ることです。これは簡単に聞こえますが、実際には難しい問題であり、それ自体が研究分野全体です。理想的な世界では、ほとんどのプログラマーはメモリ管理の問題について心配する必要はありません。残念ながら、手動および自動のメモリ管理では、メモリ管理の方法が不十分だと、プログラムの堅牢性と速度にさまざまな影響を与える可能性があります。
自動メモリ管理は、言語の一部として、またはプログラムで使用されなくなったメモリを自動的に再利用するための拡張機能として使用できるサービスです。自動メモリマネージャ(通常はガベージコレクタ、または略してコレクタと呼ばれます)は通常、プログラム変数にアクセスできないブロック(つまり、後続のポインタにアクセスできないブロック)を再利用することによって作業を行います。
自動メモリ管理の利点は次のとおりです。
自動メモリ管理の欠点は次のとおりです。
自動メモリ再利用を実行する方法はたくさんありますが、そのいくつかは再生技術で説明されています。
最近のほとんどの言語は主に自動メモリ管理を使用しています:BASIC、Dylan、Erlang、Haskell、Java、JavaScript、Lisp、ML、Modula-3、Perl、PostScript、Prolog、Python、Scheme、Smalltalkなど。
ここに写真の説明を挿入
Pythonは、複数の仮想マシンでいくつかの実装を実行します。元の「CPython」実装は独自の仮想マシンで実行され、IronPythonは共通言語ランタイムで実行され、JythonはJava仮想マシンで実行されます。
CPythonは、参照カウントと移動しないマーククリーンアップガベージコレクションを組み合わせてメモリを管理します。参照カウントにより、参照カウントがゼロに低下したときにオブジェクトがすばやく削除され、ガベージコレクターはループデータ構造をリサイクルします。
__ del__
および弱い参照(weakrefモジュール経由)。
Pythonのガベージコレクションは、参照カウントに基づいており、世代別コレクションによって補完されています。参照カウントの欠陥は、循環参照の問題です。
Pythonでは、オブジェクトの参照カウントが0の場合、Python仮想マシンはこのオブジェクトのメモリを再利用します。