Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

detecter une fuite de memoire


Sujet :

Java

  1. #1
    Membre du Club
    detecter une fuite de memoire
    bonjour svp comment detecter une fuite de memoire dans ce code
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    import java.util.EmptyStackException;
     
     
    public class Pile {
    	private Object[] contenu;
    	private int taille = 0;
     
    	public Pile(int capacite)
    	{
    		contenu = new Object[capacite];
    	}
    	private void assurance ()  {
    if (contenu.length == taille)  {
    	Object ancien = contenu;
    	contenu = new Object[4*taille + 1] ;
    	System.arraycopy(ancien, 0, contenu, 0, taille);
     
    }
     
     
    }
    	public void add(Object object) {
    	assurance();
    	contenu[taille++] = object; 
    	}
    	public Object sommet() {
     
    	if (taille == 0) {
    		throw new EmptyStackException();
     
    }
    	return contenu[--taille];
    	}		
     
    }

    merci d'avance

  2. #2
    Modérateur

    Hello,

    j'ai bien peur que la seule manière de le détecter est de se servir de sa tête.

    Où est-ce qu'on stocke des références vers des instances d'objets, quand il devrait y avoir null à la place, et à quel moment.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Merci mais dans le code ci dessus que dois je modifier
    Pour supprimer la fuite de mémoire
    Merci d'avance

  4. #4
    Rédacteur

    Bonjour,
    Je n'ai pas trop le temps de regarder et d'essayer le code, mais une recherche rapide m'a donné par exemple sur notre site ici: Tutoriel sur la détection de fuites mémoire dans une application Ellipse
    Note: tout ce que je fais en Java, toujours sous Eclipse.

    Des fuites de mémoire sont dramatiques en C++. On obligeait les programmeurs à passer un outil avant le release du paquet.
    En Java, je ne me suis jamais trop posé la question après plus de 15 ans de programmation. Il suffit que le code soit bien écrit, car c'est souvent de mauvaises pratiques qui les entrainent.

    Je n'ai fait, depuis une dizaine d'années, que des applications GUI, qui sont automatiquement relancés, ou des applis serveurs pour des systèmes embarqués où il suffit de les redémarrer régulièrement, par exemple à minuit.
    Il y a d'autres méthodes comme des watchdogs pour surveiller la mémoire. De bons try/catch peuvent aussi aider à relancer l'application et en sauvegardant l'endroit exact.

  5. #5
    Membre habitué
    Salut,

    La fuite de memoire peut etre le fait que ta methode Sommet() ne supprime pas l'element de ta pile. Dans ce cas la, nous ne pouvons qu'ajouter des elemens dans ta pile ce qui menera forcement tot ou tard a l'utilisation de toute la memoire disponible.

  6. #6
    Modérateur

    Euh, non c'est juste qu'il faut modifier sommet() pour qu'elle enlève l'élément de la pile.

    Ça ne suffit pas de réduire la taille de 1. Il faut aussi mettre null dans le tableau, en lieu et place de l'élément qu'on ne veut plus avoir dans la pile.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

###raw>template_hook.ano_emploi###