これは私がここで一つの答えで十分に答えることはできない大きな話題です。 Windows Internalsのコピーを入手することをお勧めします。これは貴重なリソースです。 Eric Lippertには最近のブログ記事があり、それはOSによって割り当てられたメモリをどのように表示できるかをよく説明しています。
プロセスが使用しているメモリは、基本的には、物理メモリ、ページファイル、またはファイルによってバックアップされているオペレーティングシステムによって予約されているちょうどaddress spaceです。これは、管理対象アプリケーションかネイティブアプリケーションかにかかわらず同じです。プロセスが終了すると、オペレーティングシステムは割り当てられたメモリを削除します。仮想アドレス空間は単に削除され、ページファイルまたは物理メモリのバッキングは他のプロセスが使用するために空き領域です。これはOSが実際に維持しているすべてのもので、アドレス空間と物理リソースのマッピングです。プロセスは、より多くのメモリを要求するかアイドル状態になるとマッピングがシフトする可能性があります。物理メモリの内容は、OSによって要求に応じてディスクに、またその逆にシフトできます。
これらのツールで使用しているプロセスは、割り当てられた合計アドレススペース、割り当てられた合計メモリ(ページファイル+物理メモリ)、プロセスが実際に使用しているメモリメモリ。タスクマネージャには、これらの可能性のそれぞれに別の列があります。
OSはガベージコレクションを実行できません。メモリには実際に格納されているものに関する洞察がないため、メモリの割り当てられたページだけが表示され、参照されないオブジェクトや参照されないオブジェクトは見えません。
OSハンドルは仮想アドレスレベルで割り当てられますが、プロセス自体には、ページサイズの大きなチャンクを使用し、アプリケーションが使用するのに便利なものに分割する他のメモリマネージャがあります。 Windowsは64k境界で割り当てられたメモリを返しますが、ヒープマネージャはnew
を介してプログラムによって行われた個々の割り当てによって使用するためにそれを小さなチャンクに分割します。 .NETアプリケーションでは、CLRはガベージコレクションヒープから新しいオブジェクトを引き渡し、そのヒープが限界に達するとガベージコレクションを実行します。
これまでの回答は素晴らしいです。それは、「管理された」環境を提供し、ガベージコレクションを備えたオペレーティングシステムが存在するのかどうかということです。 :) –
ブラックベリーのような "Java"ベースのプラットフォームと、他の組み込みシステムがあります。しかし、明示的なアプリケーション協力なしに汎用GCを提供するデスクトップクラスのOSはありません。 –
管理対象OSのマイクロソフトのリサーチプロジェクトについて読んでいます。ガベージコレクションを提供していると思いますが、リファレンスが見つかるかどうかはわかります... – Martin