Rapellez-vous vos cours de statistique (un test de chaque cas, c’est vari´e,
mais pas statistiquement valable).
Pour le 2eme livrable, vous devez expliciter les tests de validit´e et les tests
de performances que vous avez men´es.
Mesure du temps d’ex´ecution en Java
Compilation Just In Time (JIT)
Lors de sa compilation le code source java est compil´e dans un format binaire
(les fichiers .class). Ce format binaire n’est pas directement ex´ecutable sur le
processeur, il doit ˆetre interpr´et´e par une “Java Virtual Machine” (JVM).
Comme on peut s’y attendre, interpr´eter un format binaire est plus long
que de directement ex´ecuter des instructions sur le processeur. Pour palier `a ce
probl`eme, la JVM a des m´ecanismes de compilation Just-In-Time : quand un
morceau du code (typiquement une fonction) est utilis´e tr`es souvent, il est com-
pil´e en instructions machine (c’est `a dire qui n’ont pas besoin d’interpr´etation
par la JVM).
for(int i=0 ; i<1000 ; i++)
doSomething();
Sur l’example ci-dessus, il y a fort `a parier que le premier appel de la fonction
doSomething() soit plus long le dernier parce que entre temps la JVM aura
compil´e la fonction.
Pour rendre les choses encore plus complexes, la compilation JIT prend elle
aussi du temps de calcul. Pendant l’ex´ecution de la boucle ci-dessus, une partie
du temps d’ex´ecution sera d´edi´e `a la compilation.
Le ramasse miettes
Une autre particularit´e du Java est la gestion de la m´emoire. Comme vous
avez pu le remarquer, vous cr´eez de nouveaux objets avec le mot cl´e “new” (ce
qui revient `a allouer de la m´emoire). En revanche, vous n’avez jamais besoin de
lib´erer manuellement cette m´emoire (l’´equivalent des free/delete en C/C++).
Comme la m´emoire a besoin d’ˆetre lib´er´ee, la JVM a un ramasse-miettes (ou
garbage collector/GC) qui se charge de lib´erer la m´emoire des objets d´er´ef´erenc´es
(c’est `a dire qui n’ont plus de pointeurs sur eux et ne sont donc plus utilisables).
De temps en temps, le ramasse miettes (i) regarde tous les objets a qui de
la m´emoire a ´et´e allou´ee (ii) d´etermine ceux qui ne sont plus utilisables (c’est `a
dire d´er´ef´erenc´es) (iii) lib`ere la m´emoire de ces objets.
L`a encore cette op´eration est coˆuteuse en temps de calcul et il est difficile
de pr´evoir quand elle aura lieu.
1 i n t s t a r t D i j k s t r a = System . g etCurrentTime M i l li s ( ) ;
2 dijkstra ();
3 i n t e n d D i j k s t r a = System . g e t C u r r e n tT i m e M i l l is ( ) ;
4
5 i n t s t a r tAS t a r = System . g e t C u r r e n t T i meMillis ( ) ;
6 aSt a r ( ) ;
7 i n t endAStar = System . g e tCurrentT i m e M i l l i s ( ) ;
4