Comment éviter un out of memory ?
Je traite un fichier texte très volumineux (plusieurs centaines de méga octets) et je tombe sur un out of memory.
Pourtant il s'agit d'un batch qui ne garde pas de référence sur les String créées lors de la lecture du fichier :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
BufferedReader input = new BufferedReader(new FileReader(file));
try {
int count = 1;
String line = input.readLine();
while (line != null) {
traitement(line, count++);
line = input.readLine();
if (count % 100 == 0) {
System.gc();
}
}
}
finally {
input.close();
} |
Je ne comprends pas pourquoi le GC ne détruit pas les String régulièrement puisqu'elles ne sont plus référencées.
J'ai rajouté System.gc() en espérant que cela améliorerait la situation, mais cela ne fait que retarder le plantage sans l'empêcher :aie: