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.