Le but est de créer collectivement un ensemble de slides (30 slides de concepts + 25 par runtime)
présentant dans un premier temps, les optimisations classiques fait par un runtime (JIT)
en se foclisant sur l'optimisation des boucles et des appels de methodes,
puis chaque runtime et les optimisations spécifique de chaque runtime.
et enfin de montrer l'impact de ses optimisations sur 2 benchmarks.
Mercredi 11 Novembre: rendu des slides
Le premier benchmark consiste à calculer la somme d'un tableau d'entier d'un million
de valeurs entre 0 et 100 (non compris). Le second benchmark consiste à calculer la somme
d'un tableau d'objet (des A et des B chaque classe contenant un seul champ).
En Java, cela donnera à peu près
sealed interface I { int value(); }
record A(int value) implements I {}
record B(int value) implements I {}
...
private static final int[] INT_ARRAY = new Random(0).ints(1_000_000, 0, 100).toArray();
private static final I[] OBJ_ARRAY = new Random(0).ints(1_000_000, 0, 100).mapToObj(i -> i < 50? new A(i): new B(i)).toArray(I[]::new);
...
@Benchmark
public int sum_int(int[] array) {
var sum = 0;
for(var i = 0; i < array.length; i++) {
sum += array[i];
}
return sum;
}
@Benchmark
public int sum_int(I[] array) {
var sum = 0;
for(var i = 0; i < array.length; i++) {
sum += array[i].value();
}
return sum;
}