2013-04-05 2 views
5

私が理解している限り、すべてのバージョンの.NETには3世代のガベージコレクションがあります(0,1,2)。.NETでは、GC.MaxGenerationは2ではありませんか?

GC.MaxGenerationを調べると2以外の結果が出ることはありますか? GC世代数が異なる他のフレームワーク上にGCがありますか?

+4

私はテストしませんでしたが、古いCompact Frameworkは非世代GCを使用していました。この場合、MaxGenerationは0を返すように文書化されています。 –

答えて

8

GC.MaxGenerationアプリケーションの寿命のために一定であることは、それ自体で実装の詳細であることに留意すべきである。この実装のためインプリ

ノート、MaxGeneration プロパティによって返される値アプリケーションを実行中の の寿命の間、一定のままであることが保証されます。

これは、MaxGeneration .NETフレームワークの他の実装で2異なっていてもよいが、それはまたがでガベージコレクタによって使用される世代の数に応じて(プログラム実行中を変化させることができるだけでなく、意味プロパティゲッターが呼び出される時刻)。

他の実装では、状況に応じて異なるガベージコレクタを使用することもできます。たとえば、MonはBoehm non-generational GC(は常に0)、またはSGen generational GC(2世代のみを実装するため、MaxGenerationは常に1以下になります)のいずれかを使用できます。

+0

私は分かりません。実行中のアプリケーションの存続期間中一定であることが保証されていますが、プログラムの実行中に変化する可能性があります。 –

+4

@John、この実装では*と言われています。つまり、「MaxGeneration」の残りの定数は、Microsoftの.NETフレームワークの実装にのみ適用されます。 –

+0

SSCLIでは、2が返されるようにハードコードされているため、実行中に変更される可能性はありません。 – Pete

関連する問題