Verhindert die List-subList () -Methode eine Speicherbereinigung des Rests der Liste?

8

Ich bin gespannt, wie die neuesten JVMs mit Garbage-Collection-Speicher umgehen, der mit der folgenden Methode reserviert wurde.

%Vor%

Im schlimmsten Fall kann ich mir vorstellen, dass die JVM den gesamten Inhalt von listToSort im Speicher behält, solange Referenzen auf die Unterliste verbleiben. Weiß jemand, ob das tatsächlich der Fall ist? Ich bin besonders an Links interessiert, die dies auf die eine oder andere Weise für bestimmte JVMs beweisen können.

    
Caoilte 14.11.2010, 19:32
quelle

3 Antworten

10

Ja, subList ist nur eine "Ansicht" auf die bestehende Liste. Alle Daten sind wirklich in der ursprünglichen Liste. Aus der Dokumentation:

  

Die zurückgegebene Liste wird von dieser Liste unterstützt, sodass nicht strukturelle Änderungen in der zurückgegebenen Liste in dieser Liste widergespiegelt werden und umgekehrt.

Wenn Sie also eine Unterliste zurückgeben, wird die ursprüngliche Liste nicht als Garbage Collected behandelt.

Wenn Sie diesen Effekt nicht möchten, müssen Sie grundsätzlich eine Kopie der relevanten Unterliste erstellen. Zum Beispiel:

%Vor%     
Jon Skeet 14.11.2010, 19:35
quelle
1

subList erstellt eine neue Instanz von AbstractList.SubList , die einen Verweis auf die ursprüngliche Liste behält. Wenn Sie also die von getHallOfFame zurückgegebene Variable beibehalten, verhindert dies, dass die GC listToSort bereinigt.

    
khachik 14.11.2010 19:38
quelle
0

Ich denke, du hast Recht. Da die Unterliste von der ursprünglichen Liste unterstützt wird. Aus den Java-Dokumenten:

  

Gibt eine Ansicht des Teils davon zurück   Liste zwischen dem angegebenen fromIndex,   inklusive und toIndex, exklusiv. (Ob   fromIndex und toIndex sind gleich, die   Die zurückgegebene Liste ist leer.) Die zurückgegebene   Liste wird durch diese Liste unterstützt   nicht-strukturelle Veränderungen in der zurückgegebenen   Liste sind in dieser Liste enthalten, und   und umgekehrt. Die zurückgegebene Liste wird unterstützt   alle optionalen Listenoperationen   unterstützt von dieser Liste.

    
CoolBeans 14.11.2010 19:37
quelle

Tags und Links