1
.NET CLRのガベージコレクションについてこれが正しく理解されている場合、GCは参照型割り当ての領域が必要だがマネージヒープに余裕がないときに発生します。それで、管理されたヒープにはどれくらいの大きさの制限がありますか?ありがとう。私は管理されたヒープが動的に成長したと思いましたか?
.NET CLRのガベージコレクションについてこれが正しく理解されている場合、GCは参照型割り当ての領域が必要だがマネージヒープに余裕がないときに発生します。それで、管理されたヒープにはどれくらいの大きさの制限がありますか?ありがとう。私は管理されたヒープが動的に成長したと思いましたか?
はい、32ビットプロセスの場合、仮想アドレス空間は2GBに制限されています(すべてのCLRのオーバーヘッドを考慮すると、現実的に約1.5GBになります)。 64ビットプロセスの制限は8TBです。
これは、ヒープが最初は2GBであるのではなく、ヒープがそのサイズまで拡張できることを意味します。 CLRは、必要に応じてより多くのメモリを割り当てます。ヒープには異なる世代(0から2までの番号が付けられています)があり、これらの世代ごとにしきい値があります。ガベージコレクションを開始するのは、それぞれのしきい値の会議です。アプリケーションが実行されるにつれて、これらのしきい値は、アプリケーションのパフォーマンス要件に最適に調整されます。
ガベージコレクションは、ヒープによって2GBのメモリが使用された後にのみ発生しますか?ほとんどのアプリケーションでガベージコレクションが実行されることはないようですが、これはかなり大きな制限です。 –
各世代のサイズ制限を監視する方法はありますか?ガベージコレクションがいつ発生するのかを監視して、わかりやすい方法で低レベルの方法を欲しいと思います。 –
できます。 perfmonを使用できます - http://codebetter.com/blogs/raymond.lewallen/archive/2005/03/31/60938.aspxを参照してください。 –