Bonjour à tous,
Voilà j'ai vu ça dans le code de ma boite et je me demandais si cela représentait réellement un gain de performances :
J'ai donc fait un petit code de test et les résultats s'avèrent plutôt aléatoires :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Set<Long> s = new HashSet<Long>(); for(i = 0, I = s.size(); i < I; i++) { ... }Le résultat ne donne pas vraiment l'avantage à l'une ou l'autre méthode. Cela dit ma machine est assez instable et rame, donc j'aurais voulu savoir si l'un d'entre vous connaissait le mécanisme de Java concernant cet aspect particulier des boucles?s.size() = 3719 ms
I = 4187 ms
Mon sentiment est que la machine virtuelle stocke dans sa mémoire la variable s.size() afin de n'avoir à appeler la fonction qu'une seule fois.
Je vous colle le code du jeu de test que j'ai utilisé :Merci d'avance d'éclairer ma lanterne
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 public static void main(String[] args) throws IOException { Set<Long> s = new HashSet<Long>(); long l = 0; long i, I = 0; final int OCCURS = 50; for(i = 0; i < 999999; i++) { s.add(i); } l = System.currentTimeMillis(); for(int j = 0; j < OCCURS; j++) { for(i = 0; i < s.size(); i++) { if(i % 400000 == 0) System.out.print(i + " "); } } System.out.print("\n"); l = System.currentTimeMillis() - l; System.out.println("s.size() = " + l + " ms"); l = System.currentTimeMillis(); for(int j = 0; j < OCCURS; j++) { for(i = 0, I = s.size(); i < I; i++) { if(i % 10000 == 0) System.out.print(i + " "); } } System.out.print("\n"); l = System.currentTimeMillis() - l; System.out.println("I = " + l + " ms"); }![]()
Partager