テクノロジーの共有:Pythonはどのようにメモリ管理を実行しますか?

  Pythonは主に、メモリ管理に参照カウントとメモリプールメカニズムを使用します。次に、Xiaoqianはこれら2つの方法について詳しく説明します。

83.jpg

  1.参照カウントメカニズム

  Pythonは内部的に参照カウント(オブジェクトが持つ参照の数を記録する)を使用して、メモリ内のオブジェクトを追跡します。オブジェクトが作成されると、オブジェクトの参照カウントは1ずつ増加します。オブジェクトが破棄されると、オブジェクトは0になります。ゴミとしてリサイクルされます。

  参照カウントが増加します。

  (1)x = 4などのオブジェクトが作成されます。

  (2)y = xなどの他の変数に値を割り当てます。

  (3)は、foo(x)などのパラメーターとして関数に渡されます。

  (4)a = [1、x、'33 ']などのコンテナオブジェクトの要素として。

  参照カウントの削減:

  (1)オブジェクトの参照はスコープを離れます。たとえば、foo(x)関数が終了すると、xによって参照されるオブジェクトの参照カウントが1つ減ります。

  (2)オブジェクトの参照は、delxやdeliなど、明示的に破棄されます。

  (3)オブジェクトのエイリアスは、他のオブジェクトに割り当てられます(x = 789)。

  (4)オブジェクトがウィンドウオブジェクトa.remove(x)から削除されます。

  ガベージコレクション:

  (1)ガベージコレクターは、参照カウントが0のオブジェクトを再利用し、これらのオブジェクトが占有しているメモリスペースをクリアします。

  (2)2つのオブジェクトが相互に参照している場合、それらが他の参照によって保持されていない場合、それらはガベージコレクターによってリサイクルされます。

  (3)ガベージコレクションメカニズムには、循環参照オブジェクトの解放を保証できる循環ガベージコレクタもあります(aはbを参照し、bはaを参照します)。

  第二に、メモリプールメカニズム

  Pythonでは、多くの場合、要求されたメモリは小さなメモリブロックです。これらの小さなメモリブロックは、アプリケーションの直後に解放されます。つまり、プログラムは操作中に多数のアプリケーションと解放操作を実行し、実行に影響を与えます。 Pythonの効率。Pythonの実行効率を高速化するために、Pythonは、アプリケーションとメモリの小さなブロックの解放を管理するためのメモリプールメカニズムを導入しました。

  Pythonの256バイト未満のすべてのオブジェクトは、メモリプールアロケータを使用します。さらに、整数、浮動小数点数、リストなどの一部のPythonオブジェクトには独立したメモリプールがあり、これらの独立したメモリプールはオブジェクト間で共有されません。つまり、多数の整数が割り当てられて解放されると、これらの整数をキャッシュするために使用されるメモリプールは、浮動小数点数に割り当てられなくなります。

この記事はQianfengEducationからのものです、転載のソースを示してください。

おすすめ

転載: blog.51cto.com/15128702/2676985