Méthodologie et outils pour l'optimisation
- Les principes, les stratégies d’optimisation.
- Les outils de profilage, de tests et d'aide.
- Les éléments impliqués dans l'optimisation.
Travaux pratiques
Utilisation d’un outil de profilage (VisualVM ou JFR) et d’un outil de tests unitaires (JUnit).
Les caches
- Le principe général des caches, les méthodes importantes.
- Les principales collections utilisées comme caches.
Travaux pratiques
L’amélioration des performances de l'application témoin par l’introduction de caches. Utilisation d’un outil de profilage (VisualVM ou JFR).
L'optimisation et la gestion de la mémoire
- La création, la copie d’objets, de tableaux (clone vs constructeurs de copie).
- Les objets non modifiables, les objets non mutables, les pools d’objets.
- Les différents GC (les algorithmes, le paramétrage, la visualisation de l’activité).
- Les dumps mémoire, la saturation mémoire (les causes, le diagnostic, les solutions).
- Les références faibles (soft, weak, phantom);
Travaux pratiques
L’amélioration des performances de l'application témoin par une meilleure gestion des objets. Utilisation d'un outil de visualisation de la mémoire (VisualVM) et de l'activité du GC (Visual GC).
L'optimisation et le multithread
- Le parallélisme versus la concurrence.
- Les principaux concepts : Runnable, Thread, Callable<T>, ExecutorService, …
- L’impact du parallélisme et de la concurrence sur les performances.
- Quelques solutions d’optimisation.
Travaux pratiques
L’amélioration des performances de l'application témoin par l’introduction de threads (la parallélisation et la gestion de la concurrence).
L'optimisation et le langage
- Les différents modes d’exécution et de compilation.
- L’utilisation optimale des types, des instructions, des méthodes.
- Les lambda-expressions, les streams, …
- La manipulation des chaînes de caractères.
Travaux pratiques
Amélioration des performances de l'application témoin.
L'optimisation et les I/O
- La librairie nio. Les buffers, channels. Les sélecteurs et leur utilisation.
- Le choix des bonnes classes de stream.
- L'optimisation de la sérialisation.
Travaux pratiques
Amélioration des performances de l'application témoin par une meilleure gestion des IO.