Acredito que, pelo design dos implementadores de GC, você não pode acelerar o GC com a anulação. Tenho certeza de que eles preferem que você não se preocupe com como / quando o GC é executado - trate-o como este Onipresente Sendo protegendo e cuidando de você ... (inclina a cabeça, levanta o punho para o céu) .. .
Pessoalmente, geralmente defino explicitamente variáveis como nulas quando termino com elas como uma forma de auto-documentação. Não declaro, uso e defino como nulo mais tarde - anulo imediatamente depois que eles não são mais necessários. Estou dizendo, explicitamente: "Eu terminei oficialmente com você ... se foi ..."
A anulação é necessária em um idioma do GC? Não. É útil para o GC? Talvez sim, talvez não, não sei ao certo, por design, eu realmente não posso controlá-lo e, independentemente da resposta de hoje com esta versão ou aquela, futuras implementações de GC podem mudar a resposta além do meu controle. Além disso, se / quando a anulação for otimizada, será pouco mais que um comentário sofisticado, se você desejar.
Eu acho que se isso esclarece minha intenção para o próximo pobre idiota que segue meus passos, e se "pode" potencialmente ajudar a GC algumas vezes, então vale a pena para mim. Principalmente, isso me faz sentir arrumado e claro, e Mongo gosta de me sentir arrumado e claro. :)
Eu vejo assim: Linguagens de programação existem para permitir que outras pessoas tenham uma idéia da intenção e um compilador faça uma solicitação de trabalho sobre o que fazer - o compilador converte essa solicitação em um idioma diferente (às vezes várias) para uma CPU - a (s) CPU (s) podem dizer o que você usou, as configurações de sua guia, comentários, ênfases estilísticas, nomes de variáveis, etc. Muitas coisas escritas no código não se convertem no que é consumido pela CPU na sequência especificada. Nosso C, C ++, C #, Lisp, Babel, assembler ou o que quer que seja teoria e não realidade, escrito como uma declaração de trabalho. O que você vê não é o que você recebe, sim, mesmo na linguagem assembler.
Entendo que a mentalidade de "coisas desnecessárias" (como linhas em branco) "nada mais é do que barulho e confusão de código". Essa fui eu no início da minha carreira; Eu entendo isso totalmente. Neste momento, eu me inclino para o que torna o código mais claro. Não é como se eu estivesse adicionando até 50 linhas de "ruído" aos meus programas - são algumas linhas aqui ou ali.
Há exceções para qualquer regra. Em cenários com memória volátil, memória estática, condições de corrida, singletons, uso de dados "obsoletos" e todo esse tipo de apodrecimento, isso é diferente: você PRECISA gerenciar sua própria memória, bloqueando e anulando conforme apropriado, porque a memória não faz parte da memória. o universo da GC - espero que todos entendam isso. O resto do tempo com os idiomas do GC é uma questão de estilo, e não de necessidade ou um aumento garantido de desempenho.
No final do dia, entenda o que é elegível para o GC e o que não é; bloquear, descartar e anular adequadamente; cera, cera; inspire, expire; e por tudo o mais eu digo: se é bom, faça. Sua milhagem pode variar ... como deveria ...