Un recolector de basura no es un sistema activo. Se ejecuta "a veces" y principalmente a pedido (por ejemplo, cuando todas las páginas que ofrece el sistema operativo están llenas).
La mayoría de los recolectores de basura se ejecutan de manera similar a la primera generación en un subproceso. En la mayoría de los casos, pueden pasar horas antes de que el objeto se recicle.
El único problema ocurre cuando desea terminar el programa. Sin embargo, eso no es realmente un problema. Cuando utilice kill
un sistema operativo le pedirá cortésmente que finalice los procesos. Sin embargo, cuando el proceso permanece activo, se puede usar kill -9
donde el sistema operativo elimina todo el control.
Cuando ejecuté su código en el csharp
entorno interactivo , obtuve:
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
Por lo tanto, su programa se bloquea porque stdout
está bloqueado por la terminación del entorno.
Al eliminar Console.WriteLine
y matar el programa. Después de cinco segundos, el programa termina (en otras palabras, el recolector de basura se rinde y simplemente liberará toda la memoria sin tener en cuenta a los finalizadores).