Lavoro con HashMap e ArrayList di grandi dimensioni. Quando non necessitano più di essere in memoria, uso myArray.clear();
per liberare la memoria.
Quando il mio collega ha visto quella linea, l'ha cambiata in myArray = new ArrayList<>();
. Acconsentì quando gli chiesi se lo stava facendo per permettere al garbage collector di prendersene cura.
- Anche se sento che è bello, ho sentito che diminuisce la leggibilità. In qualche modo,
clear()
consente al maintainer di sapere che l'array viene cancellato. Una rapida occhiata anew ArrayList<>()
potrebbe far pensare a una persona che un array sia stato inizializzato di nuovo lì. - Il miglioramento delle prestazioni ne vale davvero la pena? Ho visto il codice sorgente di ArrayList, e il fatto che stiano iterando sulla lista di elementi da assegnare a loro null, mi ha fatto chiedere perché non potevano cancellare la memoria con una tecnica più veloce.
Implementazione di "clear":
public void clear() {
modCount++;
// clear to let GC do its work
for (int i = 0; i < size; i++) {elementData[i] = null;}
size = 0;
}
L'unico svantaggio che vedo usando new ArrayList<>()
è che una nuova serie di posizioni contigue dovrebbe essere allocata in memoria. Forse questo rappresenterebbe un problema solo se non c'è abbastanza memoria residua, prima che il garbage collector possa chiarire il