垃圾收集器不是活动系统。它“有时”运行,并且大多按需运行(例如,当OS提供的所有页面都已满时)。
大多数垃圾收集器在子线程中以类似于广度第一代的方式运行。在大多数情况下,回收对象可能需要几个小时。
唯一的问题发生在您要终止程序时。但是,这并不是真正的问题。当您使用kill
操作系统时,会礼貌地要求终止进程。但是,当该进程保持活动状态时,可以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
和杀死程序。五秒钟后,程序终止(换句话说,垃圾收集器放弃了,只释放了所有内存而没有考虑终结器)。