20191031:Pythonの根本的なメカニズム
すなわち3つの用語からのpython底部:
- 参照カウントメカニズム
- ガーベジコレクション
- メモリプールメカニズム
参照カウントメカニズム
参照カウントがメモリ内のオブジェクトを追跡することで、すべてのオブジェクトは、私たちが思ったより参照カウント、参照カウント、および船の数を持っている(例えば、数値や文字列など)不変データのために、インタプリタは、プログラムの異なる部分の間で共有されますメモリメモリを節約するために、オブジェクトがsys.getrefcountアプリケーション(の数で見ることができます)。次のように:
>>> A = 19880924 >>> sys.getrefcount(19880924) 3 >>> B = 19880924 >>> sys.getrefcount(19880924) 3 >>> C = 19880924 >>> sys.getrefcount(19880924) |
19880924の引用はないオブジェクト増加の宣言として見ることができます。
>>> C = 19880924 >>> sys.getrefcount(19880924) 3 >>> sys.getrefcount(C) 2 >>> D = C >>> sys.getrefcount(C) 3 >>> E = C >>> sys.getrefcount(C) 4 |
しかし、オブジェクトが参照されている場合、参照の数を増やすのオブジェクト
次のようなメモリ記憶機構:
引用の増加がカウント:
1、新しいオブジェクトは名前が割り当てられています
容器内に配置される2、(例えば、リストまたは辞書タプル)
例参照カウントを減らします:
オブジェクトのエイリアス・デル・ステートメントを使用して1は、破壊を表示しました
2、参照がスコープから外れる又は再割当て
ガーベジコレクション
- それはゴミに出し回収されたときに、オブジェクトの参照カウントが0の場合
- インタプリタは、定期的にループ検出を実行し、オブジェクトへの非リサイクル検索アクセスし、それらを削除します。
A)2つのオブジェクトが各オブジェクトが他のオブジェクトへの適用を含んでいるので、相互に参照するので、カウントがゼロでない参照する場合、オブジェクトが破壊されません。このような状況に鑑み2に適用されます
メモリプールメカニズム
Pymalloc機構:アプリケーションのための小さなメモリを管理およびリリース、メモリプールを導入し、Pythonのすべてのオブジェクトよりも小さい256バイトpymallocディスペンサを使用して実装され、大きなオブジェクトは、mallocのシステムが使用されます。、整数、浮動小数点やリストなどのPythonオブジェクトについては、それはその独立したプライベートメモリプールを持って、オブジェクト間でそのメモリプールを共有していません。これは、あなたが割り当てると整数の多数を解放した場合、これらをキャッシュするための整数メモリが浮かぶように割り当てることができないことを意味します。
Pythonは、オペレーティングシステムに返さのではなくメモリプールにメモリを回復しました。