Ich glaube, durch das Design der GC-Implementierer kann man GC nicht durch Nullifizierung beschleunigen . Ich bin sicher, sie würden es vorziehen, wenn Sie sich keine Gedanken darüber machen, wie / wann GC läuft - behandeln Sie es wie dieses allgegenwärtige Wesen, das Sie beschützt und auf Sie aufpasst ... (verbeugt sich mit gesenktem Kopf, hebt die Faust zum Himmel). .
Persönlich setze ich Variablen oft explizit auf null, wenn ich mit ihnen als Form der Selbstdokumentation fertig bin. Ich deklariere nicht, benutze es und setze es später auf null - ich nulle sofort, nachdem sie nicht mehr benötigt werden. Ich sage ausdrücklich: "Ich bin offiziell mit dir fertig ... sei weg ..."
Ist eine Aufhebung in einer GC-Sprache erforderlich? Ist es hilfreich für den GC? Vielleicht ja, vielleicht nein, weiß es nicht genau, von Natur aus kann ich es wirklich nicht kontrollieren, und unabhängig von der heutigen Antwort mit dieser oder jener Version könnten zukünftige GC-Implementierungen die Antwort außerhalb meiner Kontrolle ändern. Und wenn / wenn die Nullung optimiert ist, ist es kaum mehr als ein ausgefallener Kommentar, wenn Sie so wollen.
Ich denke , wenn es meine Absicht klarer auf die nächste arme Narr, der in meine Fußstapfen folgt macht, und wenn es „könnte“ potenziell manchmal Hilfe GC, dann lohnt es sich , es mir. Meistens fühle ich mich dadurch ordentlich und klar, und Mongo fühlt sich gerne ordentlich und klar. :) :)
Ich sehe das so: Es gibt Programmiersprachen, mit denen Leute anderen eine Vorstellung von der Absicht geben können und einem Compiler eine Jobanfrage, was zu tun ist - der Compiler konvertiert diese Anfrage in eine andere Sprache (manchmal mehrere) für eine CPU - Die CPU (s) können einen Hinweis darauf geben, welche Sprache Sie verwendet haben, welche Registerkarteneinstellungen, Kommentare, Stilschwerpunkte, Variablennamen usw. - bei einer CPU dreht sich alles um den Bitstrom, der angibt, welche Register und Opcodes und Speicherorte zu ändern sind. Viele in Code geschriebene Dinge werden nicht in der von uns angegebenen Reihenfolge in das konvertiert, was von der CPU verbraucht wird. Unser C, C ++, C #, Lisp, Babel, Assembler oder was auch immer eher Theorie als Realität ist, geschrieben als Arbeitserklärung. Was Sie sehen, ist nicht das, was Sie bekommen, ja, selbst in Assembler-Sprache.
Ich verstehe die Denkweise von "unnötigen Dingen" (wie Leerzeilen) "sind nichts als Rauschen und unübersichtlicher Code." Das war ich früher in meiner Karriere; Das verstehe ich total. An dieser Stelle neige ich zu dem, was den Code klarer macht. Es ist nicht so, dass ich meinen Programmen sogar 50 Zeilen "Rauschen" hinzufüge - es sind hier oder da ein paar Zeilen.
Es gibt Ausnahmen zu jeder Regel. In Szenarien mit flüchtigem Speicher, statischem Speicher, Rennbedingungen, Singletons, Verwendung "veralteter" Daten und all dieser Art von Fäulnis ist das anders: Sie MÜSSEN Ihren eigenen Speicher verwalten, als Apropos sperren und aufheben, da der Speicher nicht Teil von ist das GC'd Universum - hoffentlich versteht das jeder. Der Rest der Zeit mit GC-Sprachen ist eher eine Frage des Stils als der Notwendigkeit oder einer garantierten Leistungssteigerung.
Stellen Sie am Ende des Tages sicher, dass Sie verstehen, was für GC in Frage kommt und was nicht. entsprechend sperren, entsorgen und aufheben; Wachs drauf, Wachs runter; Einatmen Ausatmen; und für alles andere sage ich: Wenn es sich gut anfühlt, mach es. Ihr Kilometerstand kann variieren ... wie es sollte ...