Benchmarking et optimisations en Java

Préliminaires à l'exécution du benchmark

Récupération de ressources

La JVM récupère automatiquement des ressources de deux manières : le "Garbage Collection" et "L'Object finalization".

La classe System offre à cet effet deux méthodes pour effectuer manuellement cette opération : gc() et runFinalization() que l'on peut par exemple placer dans une méthode cleanJvm().

Le temps imparti à cette opération doit être inclus dans le temps d'exécution de la tâche, mais nécessite d'isoler le GC/OF provoqué par du code externe.

La méthodologie à suivre est donc la suivante :

  1. Avant toute mesure, appeler cleanJVM().
  2. Mesurer le temps de 60 exécutions d'une seconde chacune environ (multiples invocations de la tâche).
  3. Lancer cleanJVM() mais mesurer cette fois le temps de son exécution : si celui-ci est égal à 1% ou plus du temps d'exécution de la tâche, un avertissement doit être adressé au développeur, car il semblerait que le temps nécessaire pour le GC/OF lié à la tâche n'a pas été totalement inclus dans la mesure précédente.

A propos des caches

Les caches hardware et de l'OS compliquent les benchmark :

Précautions d'usage

Voici quelques précautions d'usage à respecter avant l'exécution d'un benchmark :