comment être sûr qu'un ArrayList est désalloué ?
Bonjour,
J'ai le code suivant qui fonctionne bien et j'essaye de voir si c'est bien optimisé car lobj sera relativement gros :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| List<List<Object>> lobj = new ArrayList<List<Object>>();
//Remplissage de lobj depuis un fichier
...
innerObj.add(j, Double.valueOf(splitLine1[j]).doubleValue());
...
//Tri des columnes (sauf la 1ère ligne d'en-tête)
List<Double> temp = null;
for (int a = 0; a < lobj.get(0).size(); a++) {
temp = new ArrayList<Double>(lobj.size() - 1);
for (int b = 1; b < lobj.size(); b++) {
temp.add(b - 1, Double.valueOf(lobj.get(b).get(a).toString()));
}
Collections.sort(temp);
for (int c = 1; c < lobj.size(); c++) {
lobj.get(c).set(a, temp.get(c - 1));//Est-ce que la mémoire de temp est désallouée quand je sors de chaque boucle "int a" ? Ou est-ce que je devrais écrire temp.get(c - 1).doubleValue() à la place ? Ou autre chose ?
}
} |
Je sais que le GC relâche les objets qui ne sont plus référencés et je ne cherche pas à l'appeler moi-même. Ma question est : est-ce que je laisse une référence à temp.get(c - 1) quand je set lobj.get(c).set(a, temp.get(c - 1) ? Parce qu'effectivement, qunad je sors de chaque loop, temp est redéfini mais cela ne veut pas dire que la mémoire allouée ne va pas être libérée par le GC si ses éléments sont encore référencés, ce que je crains que soit le cas qunad j'appelle la méthode set de la manière que je fais. Ou alors est-ce que la méthode set fait sa propre copie de temp.get(c - 1), dans quel cas en effet, temp ne sera plus référencé et automatiquement libéré par le GC.
Merci pour votre aide,