Ein Garbage Collector ist kein aktives System. Es läuft "manchmal" und meistens auf Anfrage (zum Beispiel wenn alle vom Betriebssystem angebotenen Seiten voll sind).
Die meisten Müllsammler laufen in der Breite der ersten Generation in einem Subthread. In den meisten Fällen kann es Stunden dauern, bis das Objekt recycelt wird.
Das einzige Problem tritt auf, wenn Sie das Programm beenden möchten. Das ist jedoch kein wirkliches Problem. Wenn Sie kill
ein Betriebssystem verwenden, werden Sie höflich gebeten, Prozesse zu beenden. Wenn der Prozess jedoch aktiv bleibt, kann verwendet werden, kill -9
wo das Betriebssystem alle Kontrolle entfernt.
Wenn ich Ihren Code in der interaktiven csharp
Umgebung ausgeführt habe, habe ich:
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
Somit stürzt Ihr Programm ab, weil stdout
es durch die Terminierung der Umgebung blockiert wird.
Beim Entfernen Console.WriteLine
und Beenden des Programms. Nach fünf Sekunden wird das Programm beendet (mit anderen Worten, der Garbage Collector gibt auf und gibt einfach den gesamten Speicher frei, ohne die Finalizer zu berücksichtigen).