Sono curioso di scoprire come le ultime JVM gestiranno la memoria di raccolta dei rifiuti riservata con il seguente metodo.Il metodo ListlistList() impedisce la garbage collection del resto dell'elenco?
public List<Player> getHallOfFame() {
ArrayList<Player> listToSort = new ArrayList<Player>(map.values());
Collections.sort(listToSort, comparator);
return listToSort.subList(0, 5);
}
Al peggiore che può immaginare la JVM mantenendo l'intero contenuto della listToSort
in memoria fino a quando rimangono riferimenti alla sottolista. Qualcuno sa se questo è effettivamente il caso? Sono particolarmente interessato ai collegamenti che possono dimostrare questo in un modo o nell'altro per JVM specifici.
Mi piacerebbe che .subList restituisca una nuova lista e listToSort andrà fuori campo, quindi otterrebbe la raccolta dei dati inutili. –
@Paul: la documentazione indica diversamente. –
Sì, la chiave qui è che è supportata dall'elenco originale in modo che qualsiasi modifica nell'elenco originale si rifletta nella sottolista. – CoolBeans