new maStringBis = "http://monsite.com/...";
Ca compile ça?
Sinon, mon canard en plastique vient de me donner des infos intéressantes :
- on n'optimise pas les String autrement qu'en évitant d'en créer (c'est paradoxal mais c'est lié à la nature même des String)
- on soupçonne ton code d'être récursif... Donc dans tous les cas y'a danger.
- tu fais un aspirateur de site
- tu ne sais pas comment fonctionne la collecte des objets avec le garbage collector (d'un autre côté, si tu es en Java 5 ou moins, on ne pourra pas faire grand chose pour toi)
Petite astuce du coup : créé tes variables qui doivent être réutilisées dans une méthode à part !
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
...
String basePage = "http://url de base commune à toutes les pages"
for (...){
traitementPage(id);
}
...
private void traitementPage(Long id){
StringBuilder sb = new StringBuilder();
sb.append(basePage);
sb.append(id);
//traitement
} |
Toutes les variables déclarées dans la méthode traitementPage seront marquées comme "bonnes à être purgées" à chaque fois que tu sortiras de la méthode. Mets-y les éléments qui sont consommateurs de ressources.
N'hésites pas à te renseigner sur le fonctionnement du garbage collector, des références pour comprendre comment bien "optimiser" du code. La clé est la suivante : garder le moins de références possibles et ne pas déclarer de nouvelles variables dans les boucles !
Et sinon, lors de l'exécution, pour voir ce qui consomme, lance jVisualVm (directement en ligne de commande ou dans le dossier d'installation de ton JDK)
Bonne chance et hésite pas à poser des questions (et à nous donner plus d'éléments pour qu'on puisse te répondre)
Petit rappel pour Java 8 : http://docs.oracle.com/javase/8/docs...r_excessive_gc
The parallel collector throws an OutOfMemoryError if too much time is being spent in garbage collection (GC): If more than 98% of the total time is spent in garbage collection and less than 2% of the heap is recovered, then an OutOfMemoryError is thrown. This feature is designed to prevent applications from running for an extended period of time while making little or no progress because the heap is too small. If necessary, this feature can be disabled by adding the option -XX:-UseGCOverheadLimit to the command line.
En gros, ton erreur arrive parce que ton programme passe plus de 98% du temps à essayer de faire de la place en mémoire pour arriver à tourner !
Partager