Ho appena iniziato con .NET Framework con C# come lingua. Ho in qualche modo capito il concetto di GC in Java e ho avuto una rivisitazione dello stesso concetto in .NET oggi.La Garbage Collection ha mai influenzato lo stack?
In C#, i tipi di valore vengono messi nello stack (come nel caso di Java, dove le variabili locali vengono messe nello stack). Ma in C#, anche struct
è incluso nei tipi di valore. Quindi, anche i struct
vengono messi in pila. Nel peggiore dei casi, dove ci sono molte chiamate di metodo, e lo stack è popolato pesantemente con molti metodi, e ogni metodo ha molti tipi di valore locale, e molti struct
s che hanno molti tipi di valore locale, il Garbage Collector avrà mai effetto lo stack? Da quello che ho cercato (e in parte ciò che mi è stato insegnato), capisco che non lo farà. Soprattutto perché la manipolazione del contenuto dello stack comporterà un sacco di spese generali, e inoltre, GC consulta solo gli stack per cercare i riferimenti e nient'altro.
Solo per aggiungere un'altra domanda relativa allo stesso argomento: Forzare una chiamata a GC (come System.gc()
in Java, non sono sicuro dell'equivalente C#), non garantisce che la routine GC venga chiamata allora e lì. Quindi, dove dovrei effettuare una chiamata - dove mi aspetto che abbia bisogno che il GC funzioni, o in un posto casuale in quanto non vi è alcuna garanzia che la mia chiamata attiverà immediatamente il GC? O dovrei lasciare le cose al Runtime Environment e non preoccupartene?
Nota: ho aggiunto il tag Java perché sto cercando di collegare i concetti da lì. Capisco che il funzionamento interno di GC nei due ambienti di runtime separati sarà sicuramente diverso, ma immagino che il concetto di base sarebbe lo stesso.
Grazie per aver risposto. Tornerò dopo aver letto di più su di esso. –