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.
Sie sind verwirrend C mit Java. – immibis
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. –