Acabo de comenzar con .NET Framework con C# como mi idioma. De alguna manera, entiendo el concepto de GC en Java, y hoy volví a visitar el mismo concepto en .NET.¿La recolección de basura alguna vez afecta la pila?
En C#, los tipos de valores se ponen en la pila (igual que en el caso de Java, donde las variables locales se ponen en la pila). Pero en C#, incluso struct
está incluido en los tipos de valor. Por lo tanto, incluso struct
s se colocan en la pila. En el peor de los casos, donde hay muchas llamadas a métodos, y la pila está llena de muchos métodos, y cada método tiene muchos tipos de valores locales, y muchos struct
que tienen muchos tipos de valores locales, el recolector de basura afectará alguna vez ¿la pila? De lo que investigué (y en parte de lo que me enseñaron), entiendo que no lo hará. Principalmente porque la manipulación del contenido de la pila implicará una gran sobrecarga, y además, GC solo consulta la pila para buscar referencias, y nada más que eso.
Solo para agregar otra pregunta relacionada con el mismo tema: Forzar una llamada a GC (como System.gc()
en Java, no estoy seguro del equivalente de C#), no garantiza que se llame a la rutina GC en ese momento. Entonces, ¿dónde debería hacer esa llamada? ¿Dónde espero que necesite la GC o cualquier lugar aleatorio ya que no hay garantía de que mi llamada active inmediatamente la GC? ¿O debería dejar las cosas en el entorno de tiempo de ejecución y no molestarme al respecto?
Nota: agregué la etiqueta Java porque estoy tratando de vincular conceptos desde allí. Entiendo que el funcionamiento interno de GC en los dos entornos de tiempo de ejecución por separado será definitivamente diferente, pero creo que el concepto subyacente sería el mismo.
Gracias por responder. Volveré después de haber leído más sobre él. –