Pythonのゴミ回収メカニズムを詳しく分析します。


導入する
なぜゴミ回収の仕組みが必要ですか?
Python中のゴミ回収メカニズムの略称(GC)は、プログラムの実行中に大量の変数を発生してデータを保存しますが、時には一部の変数はすでに使われていないので、消去されて変数が占めているメモリ空間を解放する必要があります。いくつかの低レベルの言語(例えばC言語、アセンブリ言語)では、メモリ空間の解放にはプログラミングスタッフが手動で行う必要があります。このような下のハードウェアと直接的に関わる操作は非常に危険で煩雑です。C言語に基づいて開発されたPythonはこのような懸念を解決するためにゴミ回収機構を備えています。開発者にメモリの使用状況を過度に心配する必要はなく、開発に全身全霊で投入できるようにする。

>>> name = "yunya" #yunya     
>>> name = "yunyaya" #  yunya        ,                  ,  Python              "yunya"
>>
積み上げ区域と倉庫区の概念
もしあなたが私の前に書いた文章を見たら、Python変数の底の原理についてはヒープゾーンとスタックメモリについてある程度知っています。見たことがないなら大丈夫です。リンクは以下の通りです。
Python変数と基本データタイプ
下の作業原理
参照数
参照カウントは、ヒープ領域の変数値を結合するスタック変数の名来カウントです。図のように:

delを使用するか、変数名に値を再割り当てすると、その変数値の参照カウントは-1になります。参照カウントが0の場合、次のPythonメモリ回収機構でメモリスキャンを行うと、その変数値をごみとして回収します。

ここではPythonメモリ回収メカニズムの中で最も基本的で最もよく使われている参照カウントの紹介です。
循環参照-メモリリーク
参照カウントは、Pythonメモリ回収メカニズムの中で最もよく使われる仕組みであるが、それ自体にも欠点がある。私たちは次のコードを見に来ました。

>>> l1 = [1,2,3]
>>> l2 = [1,2,3,l1]
>>> l1.append(l2)  #append()               
>>> l1
[1, 2, 3, [1, 2, 3, [...]]]
>>> l2
[1, 2, 3, [1, 2, 3, [...]]]
>>>
今はl 1とl 2を全部相互参照としました。このような引用方式を循環参照(相互参照とも呼ばれる)といい、循環参照は問題をもたらす。
  • l 1変数値の参照カウントは現在2
  • です。
  • l 2変数値の参照カウントは現在2
  • です。
  • は、del l l 1とdel l 2を使用した後ですか?
  • それらの参照変数はすべて1を減らしますが、参照方式の変数名はお互いに削除されています。これらの変数値はすべてごみ変数になります。参照の数だけではこれらのごみの変数は整理できません。
  •  
    
    >>> del l1
    >>> del l2
    >>> #       li1    li2  ?    ,               ,     2  1
    マーク→クリア
    マーククリアとは、アプリケーションが利用可能なメモリ空間を使い果たした時点でスタックエリアのスキャンを開始し、スタック変数名に沿ってヒープエリアの変数値をマーキングし、スタックエリアにスタック変数名に対応付けられていないデータがあれば、ごみデータと見なされ、Pythoonゴミ回収メカニズムによって整理されるという意味です。

    効率問題解決方案-分代理回収
    参照数に基づくゴミ回収メカニズムは、清掃作業を行うたびに、ヒープ領域全体の変数値の参照をカウントします。このようにすると非常に時間がかかりますので、Pythonのゴミ回収メカニズムは効率の向上のために、世代別回収の戦略に参加しました。

    参考文献
    https://www.jb51.net/article/161474.htm
    以上はPythonのゴミ回収メカニズムの詳細を詳しく分析しました。Pythonのゴミ回収メカニズムに関する資料は他の関連記事に注目してください。