ガベージコレクターはアクティブなシステムではありません。「時々」、ほとんどがオンデマンドで実行されます(たとえば、OSによって提供されるすべてのページがいっぱいになった場合)。
ほとんどのガベージコレクターは、サブスレッドで幅第一世代のような方法で実行されます。ほとんどの場合、オブジェクトがリサイクルされるまでに数時間かかることがあります。
唯一の問題は、プログラムを終了するときに発生します。しかし、それは本当に問題ではありません。あなたkill
がOS を使用するとき、プロセスを終了するように丁寧に尋ねます。ただし、プロセスがアクティブのままkill -9
である場合は、オペレーティングシステムがすべての制御を削除する場所を使用できます。
インタラクティブcsharp
環境でコードを実行したとき、次のことがわかりました。
csharp>
1
2
Unhandled Exception:
System.NotSupportedException: Stream does not support writing
at System.IO.FileStream.Write (System.Byte[] array, Int32 offset, Int32 count) [0x00000] in <filename unknown>:0
at System.IO.StreamWriter.FlushBytes () [0x00000] in <filename unknown>:0
at System.IO.StreamWriter.FlushCore () [0x00000] in <filename unknown>:0
at System.IO.StreamWriter.Write (System.Char[] buffer, Int32 index, Int32 count) [0x00000] in <filename unknown>:0
at System.IO.CStreamWriter.Write (System.Char[] buffer, Int32 index, Int32 count) [0x00000] in <filename unknown>:0
at System.IO.CStreamWriter.Write (System.Char[] val) [0x00000] in <filename unknown>:0
at System.IO.CStreamWriter.Write (System.String val) [0x00000] in <filename unknown>:0
at System.IO.TextWriter.Write (Int32 value) [0x00000] in <filename unknown>:0
at System.IO.TextWriter.WriteLine (Int32 value) [0x00000] in <filename unknown>:0
at System.IO.SynchronizedWriter.WriteLine (Int32 value) [0x00000] in <filename unknown>:0
at System.Console.WriteLine (Int32 value) [0x00000] in <filename unknown>:0
at P.Finalize () [0x00000] in <filename unknown>:0
したがってstdout
、環境の終了によってブロックされるため、プログラムがクラッシュします。
を削除Console.WriteLine
してプログラムを強制終了する場合。5秒後にプログラムが終了します(つまり、ガベージコレクターはあきらめ、ファイナライザーを考慮せずにすべてのメモリを解放します)。