2016-04-24 10 views
0

Mein Verständnis ist, dass Garbage Collector Speicher sammelt die nicht Bezug genommen wird, und dass die Array-Referenz (zB int [] a = new int [5]) verweist nur auf das erste Element (Do lassen Sie mich wissen, ob dies nicht korrekt ist.)Java | Wie Garbage Collector Ignoriert Speicherarray ohne Bezug

Wie weiß Garbage Collector nicht zu sammeln und gratis das Speicherplatz Element 2. zugeordnet dauern?

+1

Sie sind verwirrend C mit Java. – immibis

+0

Sie können nicht auf ein Element in einem Array verweisen, können Sie nur die Array-Referenz und einen Index als Paar halten. Da Sie immer auf die Kopfzeile zeigen müssen, gibt es in GCing keine Verwirrung. –

Antwort

7

die Array-Referenz (zB int [] a = new int [5]) weist nur auf das erste Element

Dies ist falsch .

Der Array-Verweis zeigt auf ein Java-Objekt mit einem speziellen Feld length, das (in diesem Fall) den Wert 5 enthält. Der GC weiß, wie er dieses Feld findet und weiß, was es bedeutet.

In diesem Fall kann die int[] keine Referenzen enthalten, so dass der GC nur den Array-Inhalt kopieren muss, wenn er das Array verlagert. Wenn dies war ein Integer[], dann das Array könnte Referenzen enthalten, und die GC würde (falls erforderlich) markieren und verlagern sie auch.


1 - Es wäre für C und C++ richtig sein, aber das ist verschiedene Programmiersprachen. Sie können nicht richtig ableiten, wie der Java GC auf einem mentalen Modell von C oder C++ basiert.

2 - Dies hängt von der Art der Sammlung ab. Wenn der GC ist nur den „neuen“ Raum zu sammeln und die Referenzen auf Objekte in einem älteren Raum, dann wird die GC markiert sie nicht.

Verwandte Themen