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 :
- 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 :
Citation :
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 :
- #!/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.