N'variable = null définir pour la collecte des ordures
M'aider à régler un différend avec un collègue:
Ne la définition d'une variable ou d'une collection pour les nuls en Java de l'aide dans la collecte des ordures et la réduction de l'utilisation de la mémoire? Si j'ai un long programme en cours d'exécution et que chaque fonction peut être itérative appelé (potentiellement des milliers de fois): Ne la définition de toutes les variables à null avant de retourner une valeur à la fonction parent aider à réduire la taille de segment de mémoire/mémoire d'utilisation?
Vous devez vous connecter pour publier un commentaire.
C'est des vieux de la performance de la connaissance. C'était vrai en 1.0 jours, mais le compilateur et la machine ont été améliorées afin d'éliminer le besoin (si jamais il y en avait un). Cet excellent IBM article se retrouve dans les détails si vous êtes intéressé: Java la théorie et la pratique: la collecte des Ordures et de la performance
De l'article:
Traduction: "explicitement null" objets persistants, qui ne sont plus nécessaires. (Si vous le souhaitez. "La quasi-requis" trop forte d'un énoncé?)
La machine virtuelle Java Spec
L'objet est accessible s'il peut être impliqué dans un quelconque potentiel de continuer le calcul. Donc, si votre code fait référence à une variable locale, et rien d'autre se réfère à elle, alors vous pourriez causer la collecte de l'objet par la valeur null. Ce serait donner une exception de pointeur null, ou de modifier le comportement de votre programme, ou si elle n'est ni vous n'avez pas besoin de la variable dans la première place.
Si vous êtes invalide un terrain ou un élément de tableau, alors que peut éventuellement faire sens pour certaines applications, et il sera la cause de la mémoire pour être récupéré plus vite. Une fois que le cas est de créer un grand tableau à remplacer un existant tableau référencé par un champ dans une classe - si le champ dans annulées avant le remplacement est créé, il peut soulager la pression sur la mémoire.
Une autre caractéristique intéressante de Java est que la portée n'apparaît pas dans les fichiers de classe, de sorte que la portée n'est pas pertinent pour l'accessibilité; ces deux méthodes permettent de créer le même bytecode, et donc la VM ne voit pas la portée de l'objet créé à tous:
Pas nécessairement. Un objet devient admissible pour la collecte des ordures quand il y a pas de fils plus que contenir une référence à l'objet.
Variables locales hors de portée lorsque la méthode retourne et il n'a aucun sens pour définir des variables locales à null - les variables disparaître de toute façon, et si il n'y a rien d'autre qui contient une référence les objets qui les variables visées, ces objets deviennent admissibles pour la collecte des ordures.
La clé est de ne pas regarder seulement les variables, mais regardez les objets que ces variables se rapportent à, et de trouver où ces objets sont référencés par votre programme.
Il est inutile sur les variables locales, mais il peut être utile/nécessaire pour effacer les variables d'instance qui ne sont pas plus requis (par exemple, après l'initialisation).
(Ouais ouais, je sais comment faire pour appliquer le Générateur de modèle...)
Qui ne pouvait que rendre certains sens dans certains scénario comme celui-ci:
Ici, il pourrait faire quelques avantages de décommenter la
hugeList = null
ligne, je suppose.Mais il serait certainement plus judicieux de réécrire la méthode (peut-être refactoring en deux,
ou en spécifiant un à l'intérieur de la portée).
Paramètre une référence d'objet à null, il admissibles pour la collecte des ordures.
Il n'est pas nécessairement libérer de la mémoire,qui dépend lorsque le garbage collector s'exécute(qui dépend de la JVM).
Lorsque le garbage collector s'exécute,il libère le tas en supprimant uniquement les objets qui sont admissibles pour la collecte des ordures.
Il est bon d'avoir. Lorsque vous définissez des objets à null, il y a une possibilité que l'objet peut être nettoyée plus vite, dans l'immédiat GC cycle. Mais il n'y a aucune garantie de mécanisme pour faire un objet d'ordures collectées à un moment donné.
null
(remarque, il est important d'être précis: vous ne pouvez pas définir des objets null") de sortir de l'habitude, sans réfléchir. Qui conduit à une sorte de superstition de la programmation, où vous ne savez pas pourquoi vous faites les choses, ce qui est une mauvaise idée.