Tengo curiosidad por saber cómo manejarán las últimas JVM la memoria recolectora de basura reservada por el siguiente método.¿El método List subList() previene la recolección de basura del resto de la lista?
public List<Player> getHallOfFame() {
ArrayList<Player> listToSort = new ArrayList<Player>(map.values());
Collections.sort(listToSort, comparator);
return listToSort.subList(0, 5);
}
En el peor que se puede imaginar la JVM mantener todo el contenido de listToSort
en la memoria siempre y cuando no se mantienen las referencias a la lista secundaria. ¿Alguien sabe si ese es realmente el caso? Estoy particularmente interesado en los enlaces que pueden probar esto de una forma u otra para JVM específicas.
Creo que .subList devuelve una nueva lista, y listToSort saldrá del alcance, por lo que se recogerá la basura. –
@Paul: la documentación indica lo contrario. –
Sí, la clave aquí está respaldada por la lista original, por lo que cualquier cambio en la lista original se refleja en la lista secundaria. – CoolBeans