2010-10-20 25 views
0
 if(pCoeff.size()>thisCoeff.size()){ 
     difference=pCoeff.size()-thisCoeff.size(); 
     for(int i=thisCoeff.size(); i<thisCoeff.size()+difference;i++){ 

      thisCoeff.add(i, new Double(0.0)); //this line throws errors 
     } 
    } 

J'ai isolé cette partie de mon programme comme étant la cause de fuite de mémoire, est-il possible de patcher ceci en utilisant une instruction try catch? Si oui, quelle est la syntaxe?Est-il possible de corriger une fuite de mémoire en utilisant une instruction try-catch?

+0

Comment cette fuite de mémoire? –

+0

Mon programme jette Exception dans le fil "principal" java.lang.OutOfMemoryError: Java heap space. Le but du programme est de prendre deux polynômes avec des coefficients stockés dans une liste de tableaux et d'ajouter les polynômes ensemble. Cette portion de code est supposée comparer deux listes de tableaux et s'ajouter au plus court pour leur donner la même taille. – user481211

Répondre

4

is it possible to patch this using a try catch statement?

En général, pas.

Cependant, je pense que je peux voir la cause de votre problème. Fondamentalement, la boucle ne terminera jamais. Chaque fois que vous faites le tour de la boucle, vous ajoutez un nouvel objet à la collection. Cela augmente la valeur renvoyée par thisCoeff.size() par un. Les adresses de correctif suivant: ce

if (pCoeff.size() > thisCoeff.size()) { 
    difference = pCoeff.size() - thisCoeff.size(); 
    int limit = thisCoeff.size() + difference; 
    for (int i = thisCoeff.size(); i < limit; i++) { 
     thisCoeff.add(i, new Double(0.0)); 
    } 
} 
+0

Cela fonctionne parfaitement maintenant, merci. – user481211

+0

@ user481211 veuillez accepter cette réponse puis (cliquez sur la coche). –

0

Non, la seule façon de le faire est d'avoir quelque chose de devenir injoignable dans la déclaration de capture que peut alors être recueilli. Ordures Dans ce cas, en supposant que les méthodes .size() ne font rien d'inattendu, l'utilisation de la mémoire provient de tous ces objets doubles, vous pouvez obtenir une énorme amélioration de la mémoire en utilisant un seul objet Double comme statique constante, et en l'ajoutant à la collection, ou en laissant l'autobox jvm pour vous.