
Memory Management & GC
Garbage Collection、世代、ファイナライゼーション、IDisposable、using ステートメント、メモリリーク、プロファイリング
1.NET における Garbage Collector (GC) とは何ですか?
.NET における Garbage Collector (GC) とは何ですか?
回答
Garbage Collector は、managed heap 上の未使用オブジェクトを解放する自動メモリ管理の仕組みです。メモリを手動で解放する必要がある C/C++ とは異なり、メモリリークを防ぐためにバックグラウンドで自動的に実行されます。GC はオブジェクトの参照を分析し、アプリケーションの root から到達できなくなったオブジェクトを回収します。
2.NET の Garbage Collector における 3 つの世代とは何ですか?
.NET の Garbage Collector における 3 つの世代とは何ですか?
回答
.NET の GC は 3 つの世代を使用します。Gen0(新しく短命なオブジェクト、頻繁に回収される)、Gen1(中程度の寿命のオブジェクト、Gen0 と Gen2 の間のバッファ領域)、Gen2(長寿命のオブジェクト、コストが高いためまれにしか回収されない)です。この世代別システムは、オブジェクトの 80~90% を占める短命なオブジェクト(Gen0)を最初に回収し、永続的なオブジェクト(Gen2)の頻繁なスキャンを避けることでパフォーマンスを最適化します。
3.NET における Large Object Heap (LOH) とは何ですか?
.NET における Large Object Heap (LOH) とは何ですか?
回答
Large Object Heap は 85 KB 以上のオブジェクトのための独立したメモリ空間で、論理的には Gen2 に属します。定期的にコンパクションされる標準ヒープとは異なり、LOH は大きなオブジェクトをコピーするコストを避けるためデフォルトではコンパクションされません。これによりメモリの断片化が発生する可能性があります。.NET 4.5.1 以降では、GCSettings.LargeObjectHeapCompactionMode を使って LOH のコンパクションを手動で有効化できます。
.NET における IDisposable パターンの役割は何ですか?
C# の using ステートメントは何をしますか?
+19 面接問題