Creo que por el diseño de los implementadores de GC, no se puede acelerar GC con anulación. Estoy seguro de que preferiría que no se preocupe con la forma / GC cuando se ejecuta - tratarlo como esta omnipresente Ser proteger y velar y hacia fuera para usted ... (arcos cabeza hacia abajo, levanta el puño al cielo) .. .
Personalmente, a menudo establezco explícitamente las variables en nulas cuando termino con ellas como una forma de auto documentación. No declaro, uso, luego lo configuro como nulo más tarde: lo anulo inmediatamente después de que ya no son necesarios. Estoy diciendo, explícitamente: "Ya terminé oficialmente contigo ... vete ..."
¿La anulación es necesaria en un lenguaje GC'd? No. ¿Es útil para el GC? Tal vez sí, tal vez no, no lo sé con certeza, por diseño realmente no puedo controlarlo, e independientemente de la respuesta de hoy con esta o aquella versión, las futuras implementaciones de GC podrían cambiar la respuesta más allá de mi control. Además, si se optimiza la anulación, es poco más que un comentario elegante, por así decirlo .
Me imagino que si aclara mi intención al próximo tonto pobre que sigue mis pasos, y si "podría" ayudar a GC a veces, entonces vale la pena para mí. Principalmente me hace sentir ordenado y claro, y a Mongo le gusta sentirse ordenado y claro. :)
Lo veo así: los lenguajes de programación existen para permitir que las personas den a otras personas una idea de intención y un compilador solicite un trabajo sobre qué hacer: el compilador convierte esa solicitud en un idioma diferente (a veces varios) para una CPU. la (s) CPU (s) podría (n) desear qué idioma usó, su configuración de pestañas, comentarios, énfasis estilísticos, nombres de variables, etc. Muchas cosas escritas en el código no se convierten en lo que consume la CPU en la secuencia que especificamos. Nuestro C, C ++, C #, Lisp, Babel, ensamblador o lo que sea es teoría en lugar de realidad, escrito como una declaración de trabajo. Lo que ves no es lo que obtienes, sí, incluso en lenguaje ensamblador.
Entiendo que la mentalidad de "cosas innecesarias" (como líneas en blanco) "no son más que ruido y código desordenado". Ese era yo al principio de mi carrera; Lo entiendo totalmente. En este momento me inclino hacia lo que aclara el código. No es como si estuviera agregando incluso 50 líneas de "ruido" a mis programas, son algunas líneas aquí o allá.
Hay excepciones a cualquier regla. En escenarios con memoria volátil, memoria estática, condiciones de carrera, singletons, uso de datos "obsoletos" y todo ese tipo de podredumbre, eso es diferente: NECESITA administrar su propia memoria, bloqueando y anulando como corresponde porque la memoria no es parte de the GC'd Universe, espero que todos lo entiendan. El resto del tiempo con los lenguajes GC'd es una cuestión de estilo más que de necesidad o un aumento de rendimiento garantizado.
Al final del día, asegúrese de comprender qué es elegible para GC y qué no; bloquear, desechar y anular adecuadamente; encerar, encerar; inhala exhala; y por todo lo demás digo: si se siente bien, hazlo. Su kilometraje puede variar ... como debería ...