IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

[JVM]Fuite de mémoire


Sujet :

Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Philippines

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2005
    Messages : 244
    Points : 609
    Points
    609
    Par défaut [JVM]Fuite de mémoire
    Voilà, j'ai quelques soucis avec un gros programme que je dois presenter bientot, notamment un probleme de fuite memoire. Or jusqu'à il y a peu de temps j'eu cru que java supprimé automatiquement les classe qui n'etait plus utilisée.

    Des petits conseil pour eviter les fuites? Des outils pour recuperer la memoire "perdue"?

    Merci d'avance

  2. #2
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Le garbage collector libere automatiquement mais apres un temps non défini les instances qui ne sont plus référencés.
    A mon avis le problème vient plutot de ton code que du gc ;-)
    Il existe des logiciels appeller profiler qui d'indique la mémoire utilisé par tel ou tel instance. Il s'agit en principe de connection jdbc non refermées ou d'instances stocké dans une liste et oublié par la suite.

    Profiler:
    JProfiler
    Java Memory Profiler
    DrProfiler
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  3. #3
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Philippines

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2005
    Messages : 244
    Points : 609
    Points
    609
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ArrayList trucmuche = new ArrayList();
     
    /*... un peu de code plus tard...*/
     
    trucmuche = null
    Est-ce suffisant pour supprimer toute les instances presente dans la liste?
    Et je pose la meme question pour les tableau (Object[]...)

    (ps: dans le cas contraire, ok je vois d'ou sa viens )

  4. #4
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Oui si entre temps tu n'a jamais fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ArrayList trucmucheNew=trucmuche;
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Ton programme contient des Interfaces graphiques ???

  6. #6
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Philippines

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2005
    Messages : 244
    Points : 609
    Points
    609
    Par défaut
    Bon voilà le code. J'avoue qu'il n'est pas tres glorieux (Chargement d'un fichier en memoire...)

    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
     
                            FileToRead = new RandomAccessFile(FileName,"r"); 
     
    			int filesize = (int)FileToRead.length();
    			file = new byte[filesize];
    			FileToRead.read(file,0,filesize);
     
    			setPercentCompleted(5);
     
    			s = new String(file);
     
                            file = null;
    			//Preparation du parser
    			strtok = new StringTokenizerPercent(s,",'\r\n",false );
                            //...
     
                           // et dans la clause finally:
     
    finally
    {
    try
    			{
    				if(FileToRead!=null)
    				{
    					FileToRead.close();
    				}
     
    				//Liberation de la memoire
    				FileToRead = null;
    				strtok 	= null; 
    				file = null;
    				s = null;
     
    			}
    Lorsque je charge un fichier bien gros (16Mo), je travail relativement rapidement dessus, mais une fois la procedure de traitement terminée les byte[] et char[] temporaire reste en memoire...

  7. #7
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut pas sur
    est-ce que tu es sur que c'est une fuite mémoire ? Je ne le pense pas. Le garbage collector ne se lance automatiquement que sous certaines conditions.

    Pour en être sur, il faut que tu puisses lancer un garbage collector et analyser la mémoire ensuite.

    Pour cela, utilise la jconsole.
    J'ai posté un article la dessus sur mon blog : http://tcourant.wordpress.com/2009/0...lication-java/

Discussions similaires

  1. [JNI]Fuite mémoire/ core dumped JVM
    Par kinder29 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 02/09/2008, 16h31
  2. [JVM] Connaitre la taille mémoire utilisé par les dif classe
    Par sur_uix dans le forum Général Java
    Réponses: 4
    Dernier message: 18/09/2003, 09h17
  3. [debug] fuites mémoires
    Par tmonjalo dans le forum C
    Réponses: 3
    Dernier message: 28/07/2003, 17h20
  4. [JVM][OPTIONS][OPTIMISATION]pc dédié à Java
    Par narmataru dans le forum Général Java
    Réponses: 7
    Dernier message: 16/04/2003, 17h12
  5. Réponses: 8
    Dernier message: 17/10/2002, 12h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo