Coucou à tous,

Pas génial mon problème : à une certaine ligne de mon code, parfois je perd 0, 10, 15 ou 20 Mo dans la mémoire jvm... jusqu'à saturation de la mémoire, rallentissement, puis plantage de Cocoon qui ne me renvoie plus que <html><body></body></html>...

Voici le fameux code, réduit à l'essentiel :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
InputStream source = null;
for(int i = 0; i &lt; nomsBases.size(); i++) {
	source = null;
	try {
		affMemoire("avant URL source");
		source = new java.net.URL(adressesRSS.get(i).toString()).openStream();		//¤ PERTE DE MÉMOIRE ICI
		affMemoire("apres URL source");
	}
	catch(Exception e) {
		e.printStackTrace();
	}
	finally {
		try {
			if(source != null)
				source.close();
		}
		catch(Exception e) {
			e.printStackTrace();
		}
	}
}

affMemoire() me permet d'afficher la memoire restante dans la console (Runtime.getRuntime().totalMemory() et Runtime.getRuntime().maxMemory()). Donc je sais exactement quelle ligne est fautive.

Si je lance Runtime.getRuntime().gc() à la fin de la boucle, c'est pire : c'est très lent, et à chaque tour de boucle ou presque je perd 2 Mo. Sans gc() c'est une perte d'environ 15 Mo, une fois toutes les 4 actualisations de la page (environ) (la boucle tourne 7 fois par actualisation).

C'est plutôt gênant, si je ne corrige pas ça, le serveur web va planter tous les 10 jours ! :/ (ce traitement ne se lance qu'une fois par jour)

Merci beaucoup, il en va de la survie de l'espèce humaine !