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

Langage Java Discussion :

temps d'execution sui augmente.


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 13
    Par défaut temps d'execution sui augmente.
    bonjour,
    Je suis débutant en java. J'aimerai vous soumettre un problème que j'ai. Je ne pense pas qu'il s'agisse d'un problème algorithmique mais bien un problème inhérent au langage JAVA.
    voici l'histoire.

    j'ai réalisé un programme qui sera amené a fonctionné sur un grand nombre de données de la façon suivante:

    1) lecture d'un fichier
    2) analyse du fichier
    3) traitement

    Lors de ces trois phases, j'instancie un grand nombres d'objets.

    l'exécution de ce programme prend environ 4.5 secondes lorsque je l'exécute sur un fichier.

    J'ai ensuite essayé d'insérer une boucle for dans le main pour faire une moyenne du temps d'exécution :

    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
    public static void main(String[] args) {
    		//un parseur de fichier
    		CustomFileReader fic = null;
    		//une structure de donnée pour stocker l'info
    		HashMap<String, Double> infos=null;
     
    		for (int i = 0 ; i < 4; i ++ ){
     
    			long debut =System.nanoTime()/1000000000;
    			long fin =0;
     
    			System.out.println( "debut : "+debut ) ;
     
    			fic = null;
    			infos = null;
    			1) lecture du fichier
    		        	2) analyse du fichier
                           		3) traitement
     
     
     
     
    			System.gc();
    			fin = System.nanoTime()/1000000000;
    			System.out.println( "fin : "+fin  ) ;
    			System.out.println( "diff : "+(fin-debut)  ) ;
    		}
    		System.exit(0);
     
    	}

    voici ce que le programme genere comme sortie :
    Code X : 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
    debut : 1162548161
    
    fin : 1162548166
    diff : 5
    debut : 1162548166
    
    fin : 1162548183
    diff : 17
    debut : 1162548183
    
    fin : 1162548219
    diff : 36
    debut : 1162548219
    
    fin : 1162548282
    diff : 63


    diff correspond au temps d'exécution d'une boucle. On voit bien que le temps d'exécution crois très vite alors qu'il s'agit du même traitement exécuté 4 fois sur le même fichier

    D'autre part, j'ai essayé par un script perl de lancer le programme sans la boucle for :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/bin/perl
     
    for($i = 0 ; $i <4 ; $i++){
           System("time java - jar test.jar");
    }
    je constate alors que le temps d'exécution reste constant...

    Comment cela ce fait il que le temps d'exécution augmente dans un cas et pas dans l'autre?????
    Quelqu'un aurai-t-il une idée
    Je vais être amené a traiter un grand nombre d'information et je ne souhaiterai pas avoir a utiliser un artifice tel que "lancer le programme avec un script perl"
    Si quelqu'un pourrai me donner une piste cela m'aiderai beaucoup.

  2. #2
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Par défaut
    tu évites au maximum les déclarations et allocations à l intérieur de ta boucle, tu réutilises au maximum tes variables, et tu sors le plus de traitement possible de ta boucle.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 13
    Par défaut
    oui c'est ce que je fais:

    tous mes objet sont déclaré en dehors des boucles et sont instancier a l'interieur (pas le choix)
    en gros avant chaque boucle, je fais:
    object toto = null;
    dans la boucle:
    toto = new object();
    fain de la boucle

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2005
    Messages : 42
    Par défaut
    A noter que tu utilises system.gc.... ce n'est vraiment pas recommandé...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 13
    Par défaut
    j'ai essaye avec sans system.gc() rien ne change....

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2005
    Messages : 42
    Par défaut
    D'ou l'inutilité de l'appeler... le garbage collector est géré par java il n'est pas conseillé de l'appeler a tout va..... c'était juste une remarque...
    Sinon remet tu bien toutes tes variables instanciés à null à la fin de ton execution (afin justement qu'elles soient nettoyées)...??

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 13
    Par défaut
    oui a chaque debut de la boucle for, tous mes objets sont réinitialisé a null

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. limit et temps d'execution avec oracle et PHP
    Par dor_boucle dans le forum Oracle
    Réponses: 20
    Dernier message: 10/12/2005, 14h31
  2. Temps d'execution d'un select sur une vue
    Par rosewood dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/02/2005, 16h06
  3. Temps d'execution d'une requête
    Par Maglight dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/01/2005, 08h38
  4. [VB.NET] Temps d'éxécution d'une page...
    Par Webman dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/06/2004, 12h20
  5. Connaitre le temps d'execution d'un pgm ?
    Par yacinechaouche dans le forum C
    Réponses: 7
    Dernier message: 27/01/2003, 20h57

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