Un garbage collector n'est pas un système actif. Il s'exécute "parfois" et surtout à la demande (par exemple lorsque toutes les pages offertes par l'OS sont pleins).
La plupart des éboueurs exécuter dans une largeur de première génération, à la manière d'un subthread. Dans la plupart des cas, il peut prendre des heures avant que l'objet est recyclé.
Le seul problème se produit lorsque vous souhaitez mettre fin au programme. Cependant ce n'est pas vraiment un problème. Lorsque vous utilisez kill
un OS demander poliment de mettre fin à des processus. Lorsque le processus reste cependant actif, on peut utiliser kill -9
où le Système d'Exploitation supprime tout contrôle.
Quand j'ai couru votre code dans interactive csharp
de l'environnement, j'ai:
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
Ainsi, votre programme se bloque parce qu' stdout
est bloqué par le termintation de l'environnement.
Lors de la suppression de l' Console.WriteLine
et de tuer le programme. Après cinq secondes, le programme se termine (en d'autres termes, le garbage collector donne simplement la volonté libre de toute mémoire, sans prendre les finaliseurs en compte).