2016-05-17 2 views
0

In Java kümmert sich der Garbage Collector um die Reinigung der Objekte, die keinen Bezug haben. Ich habe mich gefragt, ob der Kopf einer einfach verknüpften Liste auf null gesetzt ist, es wird kein Verweis auf den nächsten Listenknoten geben und der Garbage Collector sollte ihn zur Reinigung markieren und wir müssen nicht die gesamte Liste durchlaufen und die Knoten einzeln löschen ?Wird die Verknüpfungsliste gelöscht, wenn head in Java auf null gesetzt ist?

+0

Sie könnten leicht feststellen, dass mit einem Experiment, füllen Sie eine Liste mit großen Byte-Array, dann den Kopf Null und dies wiederholt tun. Wenn es funktioniert, werden Sie nicht aus dem Speicher gehen. – the8472

Antwort

1

Müllsammlungsüberprüfungen für lebendig Objekte.

Während einige Ihrer Objekte einen Verweis auf diese Liste enthalten, ist die Liste (und alle ihre Mitglieder) aktiv.

Wenn dieser Verweis auf die Liste nicht mehr existiert; zum Beispiel indem man es auf null setzt; Ihr Listenobjekt ist nicht mehr am Leben. So wird es der Müllsammlung unterworfen. Für die Objekte innerhalb Ihrer Liste gelten die gleichen Dinge. Also - wenn diese Liste der einzige Ort war, der einen Verweis auf das Element enthielt, dann ist das Element nicht mehr am Leben, nachdem die Liste "ungültig gemacht" wurde. Dann kann das Listenelement auch gesammelt werden. Wenn es jedoch ein anderes lebendiges Objekt gibt, das auf das Listenelement verweist ... bleibt das Listenelement; obwohl die Liste selbst gesammelt wird.

Mit anderen Worten: Sie sollten versuchen, wie der Müllsammler zu denken: zu verstehen, welche Objekte lebendig sind; und alles andere hört auf, wichtig zu sein.

0

Ja. Selbst wenn es sich um eine zirkuläre Liste handelt, wird die Datenmüllsammlung automatisch durchgeführt, solange es keine Live-Referenzen zu einem Listenelement von einer beliebigen Stelle außerhalb der Liste gibt. Weitere Informationen dazu finden Sie unter here.

Verwandte Themen