J'ai une liste de matrices qui auront constamment différentes quantités d'articles dedans. P>
Ce ne sera pas supprimé quand il est vide. p>
Peut-on causer des fuites de mémoire? p>
Je vois que les gens disent à faire quelque chose éligible à la collecte des ordures que vous devez le désaffecter. Qu'est-ce que cela signifie? P>
3 Réponses :
Un tableau vide n'est pas un risque de fuite de mémoire. p>
Les fuites de mémoire se produisent lorsqu'une collection accepte des références illimitées. Il est difficile de voir comment une liste vide sera un problème. P>
Un objet qui a une référence à une liste vide la gardera en mémoire. P>
Le collecteur des ordures marquera un objet comme éligible à la collecte des ordures lorsque aucun autre objet ne l'a fait référence. Toutes les références à cet objet doivent être supprimées. P>
Vous pouvez définir une référence à NULL à "DEF-référence". Comme ceci, par exemple: en Java lorsque rien ne pointe sur l'objet (il n'y a aucune référence à l'objet), l'objet est "admissible" pour le collecteur des ordures. P> En ce qui concerne les fuites de mémoire, cela dépend vraiment de votre situation, mais il est possible d'avoir des fuites en raison de la non-référencement. P> P>
Les développeurs parlent parfois de "fuites de mémoire" en Java. Ce qu'ils veulent dire, c'est qu'ils ont beaucoup de mémoire alloué qu'ils n'exigent plus, mais en principe em> l'application pourrait faire référence si elle voulait. Ceci est différent de la "fuite de mémoire classique" que vous verriez dans une langue comme "C" lorsque l'application doit explicitement attribuer une mémoire de transaction. Comme cette question concerne Java, je ne me préoccuperai pas de la "fuite de mémoire classique", mais je comprends simplement que les deux sont différents p>
@ @ HDW3 correctement états, dans Java, un objet est éligible pour la collecte des ordures si vous n'en avez aucune référence. Il s'agit d'un cas spécifique d'une règle plus générale - un objet est éligible à la collecte des ordures si elle ne peut en aucun cas être référencée par votre demande. Il y a une différence subtile mais importante ici ... p>
cas 1 fort>
Si vous avez une référence à l'objet 'A' et que cet objet a une référence à l'objet 'B'. (Cela pourrait être votre arraylist si contient un seul élément.) Aucun objet n'est admissible à la collecte des ordures que la chaîne peut être référencée dans la liste. P>
Dès que vous perdez le référencé à votre premier objet, aucun objet n'est accessible à partir de votre application, de sorte que les deux deviennent éligibles pour la collecte des ordures. P>
cas 2 fort>
Imaginez que vous avez une référence à l'objet 'A' et cet objet a une référence à l'objet 'B' et à l'objet 'B' a une référence à l'objet 'A'. Les objets 'A' et 'B' sont tous deux accessibles, donc non plus admissibles à la collecte des ordures. P>
Dès que vous perdez votre référence à l'objet 'A', alors 'B' devient également inaccessible. Les deux objets deviennent éligibles pour la collecte des ordures, même s'ils se réfèrent mutuellement. P>
Vous pouvez perdre votre référence à l'objet de différentes manières différentes. p>
Ce que vous trouverez, c'est que, à Java, le collecteur des ordures fait presque toujours la bonne chose pour vous et que vous n'avez pas besoin de vous déranger de la mémoire. P>
La "fuite de la mémoire" Java que j'ai mentionnée plus tôt se produit si vous avez une grande structure que vous n'exige plus, mais en théorie em> l'application pourrait faire référence à des objets dans cette structure. Par exemple, vous avez une liste massive de chaînes, vous avez fini de les traiter mais n'a pas encore existé la méthode. C'est à ce moment-là que vous affectiez votre référence à NULL, de faire des objets
Dire si cela causerait des fuites de mémoire ou non est très difficile sans code réel. En général, cela pourrait, mais dépend de beaucoup de choses (c'est pourquoi je ne pose pas une réponse et je me limite à commenter). Pour rendre quelque chose éligible à la collecte des ordures, vous pouvez le pointer sur
null code> (mais que quelque chose peut être éligible à la collecte des ordures pour d'autres raisons).