"AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
Amaurykas
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour, j'ai de nouveau besoin de vos lumières :
Je travaille actuellement sur un programme de simulation de trajectoire de tête de lecture.
Afin de déterminée le chemin le moins cher que la tête de lecture puisse faire, je créer un arbre des chemins possible, malheureusement, cette méthode étant appelée plusieurs fois, java finit par manquer de mémoire. Je souhaiterais savoir si il est possible de supprimer mes arbres une fois utilisé ou bien si vous avez une idée pour rendre mon programme moins gourmand.
Je travaille actuellement sur un programme de simulation de trajectoire de tête de lecture.
Afin de déterminée le chemin le moins cher que la tête de lecture puisse faire, je créer un arbre des chemins possible, malheureusement, cette méthode étant appelée plusieurs fois, java finit par manquer de mémoire. Je souhaiterais savoir si il est possible de supprimer mes arbres une fois utilisé ou bien si vous avez une idée pour rendre mon programme moins gourmand.
public void creaFils(Noeud nPere){ if (nPere.gettValeur()[0] != 0 && nPere.gettValeur()[0] != iRayMax && nPere.gettValeur()[1]!= iNbrSect) { nPere.ajouter(new Noeud(nPere.gettValeur()[0]-1,nPere.gettValeur()[1]+1,nPere.getiNiveau()+1),new Noeud(nPere.gettValeur()[0],nPere.gettValeur()[1]+1,nPere.getiNiveau()+1),new Noeud(nPere.gettValeur()[0]+1,nPere.gettValeur()[1]+1,nPere.getiNiveau()+1)); lListe.addLast(nPere.getnFils1());//On ajoute le 1er fils a l'annuaire lListe.addLast(nPere.getnFils2());//On ajoute le 2eme fils a l'annuaire lListe.addLast(nPere.getnFils3());//On ajoute le 3eme fils a l'annuaire lListeCrea.addLast(nPere.getnFils1());//On ajoute le 1er fils a la filo lListeCrea.addLast(nPere.getnFils2());//On ajoute le 2eme fils a la filo lListeCrea.addLast(nPere.getnFils3());//On ajoute le 3eme fils a la filo }//cas parfait if (nPere.gettValeur()[0] == 0 && nPere.gettValeur()[1]!= iNbrSect) { nPere.ajouter(new Noeud(nPere.gettValeur()[0],nPere.gettValeur()[1]+1,nPere.getiNiveau()+1),new Noeud(nPere.gettValeur()[0]+1,nPere.gettValeur()[1]+1,nPere.getiNiveau()+1)); lListe.addLast(nPere.getnFils1());//On ajoute le 1er fils a l'annuaire lListe.addLast(nPere.getnFils2());//On ajoute le 2eme fils a l'annuaire lListeCrea.addLast(nPere.getnFils1());//On ajoute le 1er fils a la filo lListeCrea.addLast(nPere.getnFils2());//On ajoute le 2eme fils a la filo }//cas trop au centre if (nPere.gettValeur()[0] == iRayMax && nPere.gettValeur()[1]!= iNbrSect) { nPere.ajouter(new Noeud(nPere.gettValeur()[0]-1,nPere.gettValeur()[1]+1,nPere.getiNiveau()+1),new Noeud(nPere.gettValeur()[0],nPere.gettValeur()[1]+1,nPere.getiNiveau()+1)); lListe.addLast(nPere.getnFils1());//On ajoute le 1er fils a l'annuaire lListe.addLast(nPere.getnFils2());//On ajoute le 2eme fils a l'annuaire lListeCrea.addLast(nPere.getnFils1());//On ajoute le 1er fils a la filo lListeCrea.addLast(nPere.getnFils2());//On ajoute le 2eme fils a la filo }//cas trop à l'extérieur if (nPere.gettValeur()[0] != 0 && nPere.gettValeur()[0] != iRayMax && nPere.gettValeur()[1]== iNbrSect) { nPere.ajouter(new Noeud(nPere.gettValeur()[0]-1,0,nPere.getiNiveau()+1),new Noeud(nPere.gettValeur()[0],0,nPere.getiNiveau()+1),new Noeud(nPere.gettValeur()[0]+1,0,nPere.getiNiveau()+1)); lListe.addLast(nPere.getnFils1());//On ajoute le 1er fils a l'annuaire lListe.addLast(nPere.getnFils2());//On ajoute le 2eme fils a l'annuaire lListe.addLast(nPere.getnFils3());//On ajoute le 3eme fils a l'annuaire lListeCrea.addLast(nPere.getnFils1());//On ajoute le 1er fils a la filo lListeCrea.addLast(nPere.getnFils2());//On ajoute le 2eme fils a la filo lListeCrea.addLast(nPere.getnFils3());//On ajoute le 3eme fils a la filo }//cas trop en bas if (nPere.gettValeur()[0] == 0 && nPere.gettValeur()[0] != iRayMax && nPere.gettValeur()[1]== iNbrSect) { nPere.ajouter(new Noeud(nPere.gettValeur()[0],0,nPere.getiNiveau()+1),new Noeud(nPere.gettValeur()[0]+1,0,nPere.getiNiveau()+1)); lListe.addLast(nPere.getnFils1());//On ajoute le 1er fils a l'annuaire lListe.addLast(nPere.getnFils2());//On ajoute le 2eme fils a l'annuaire lListeCrea.addLast(nPere.getnFils1());//On ajoute le 1er fils a la filo lListeCrea.addLast(nPere.getnFils2());//On ajoute le 2eme fils a la filo }//cas trop en bas + trop au centre if (nPere.gettValeur()[0] == iRayMax && nPere.gettValeur()[1]== iNbrSect) { nPere.ajouter(new Noeud(nPere.gettValeur()[0]-1,0,nPere.getiNiveau()+1),new Noeud(nPere.gettValeur()[0],0,nPere.getiNiveau()+1)); lListe.addLast(nPere.getnFils1());//On ajoute le 1er fils a l'annuaire lListe.addLast(nPere.getnFils2());//On ajoute le 2eme fils a l'annuaire lListeCrea.addLast(nPere.getnFils1());//On ajoute le 1er fils a la filo lListeCrea.addLast(nPere.getnFils2());//On ajoute le 2eme fils a la filo }//cas trop en bas + trop à l'extérieur } public void creaArbre(int[] tDepart, int[] tArrivee ){ iNbrTour=0; while(Math.abs(tArrivee[0]-tDepart[0])>iNbrTour*(iNbrSect+1)+(tArrivee[1]-tDepart[1])){ iNbrTour++; } iTailleArbre=(iNbrTour*(iNbrSect+1)+(tArrivee[1]-tDepart[1])); if (iTailleArbre==0){ iTailleArbre=iNbrSect+1; } Noeud nRacine = new Noeud(tDepart[0],tDepart[1],0);// creation du noeud racine lListeCrea.clear(); lListe.clear(); lListeCrea.addLast(nRacine); while (lListeCrea.size()!=0){ nNoeudTest=lListeCrea.pop(); if (nNoeudTest.getiNiveau() !=iTailleArbre){ creaFils(nNoeudTest); } } } public LinkedList<int[]> creaChemin(Noeud nArrivee){//création du chemin reliant deux positions du DD, méthode non opti nNoeudTest=nArrivee; lChemin.clear(); while (nNoeudTest.getiNiveau()!=0){ lChemin.addLast(nNoeudTest.gettValeur()); nNoeudTest=nNoeudTest.getnPere(); } return lChemin; }
A voir également:
- "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
- Remettre a 0 un pc - Guide
- Numéro de téléphone excel 0 - Guide
- 0 barré clavier ✓ - Forum Programmation
- Excel différent de 0 ✓ - Forum Excel
- Formule excel si inférieur à 0 égal 0 ✓ - Forum Excel
1 réponse
Java libère automatiquement la mémoire lorsqu'il n'en a plus, mais il faut pour cela que les données dont tu ne te sers plus ne soient plus accessibles. Dans ton cas il s'agit par exemple de les supprimer de tes listes dès que tu ne t'en sers plus.
Pour ce qui est de ton code, c'est difficile de t'aider, on ne sait pas grand chose de ton projet et encore moins à quoi correspond le code que tu nous donnes.
"Afin de déterminée le chemin le moins cher que la tête de lecture puisse faire, je créer un arbre des chemins possible"
A priori faire un traitement exhaustif de tous les chemins possible est une mauvaise idée. Je ne sais pas trop quelle peut-être ta quantité d'information, mais ça ne m'étonne pas que tu obtiennes une erreur de mémoire. Et même si tu réussis à bien gérer la mémoire, tu auras sûrement ensuite un algorithme très long, car la combinatoire de ce genre de problèmes explose rapidement.
Essaye de nous expliquer le but de ton programme et l'algorithme que tu utilises, ce sera bien plus simple qu'un code Java partiel et sans explication.
Pour ce qui est de ton code, c'est difficile de t'aider, on ne sait pas grand chose de ton projet et encore moins à quoi correspond le code que tu nous donnes.
"Afin de déterminée le chemin le moins cher que la tête de lecture puisse faire, je créer un arbre des chemins possible"
A priori faire un traitement exhaustif de tous les chemins possible est une mauvaise idée. Je ne sais pas trop quelle peut-être ta quantité d'information, mais ça ne m'étonne pas que tu obtiennes une erreur de mémoire. Et même si tu réussis à bien gérer la mémoire, tu auras sûrement ensuite un algorithme très long, car la combinatoire de ce genre de problèmes explose rapidement.
Essaye de nous expliquer le but de ton programme et l'algorithme que tu utilises, ce sera bien plus simple qu'un code Java partiel et sans explication.