Au-delà des fondamentaux, Java offre des mécanismes avancés indispensables pour les applications performantes en production : programmation concurrente avec Fork/Join et CompletableFuture, programmation fonctionnelle avec lambdas et streams, système de modules et outils de profiling JVM. Cette formation de 4 jours vous apprend à exploiter ces fonctionnalités pour écrire du code plus performant, détecter les fuites mémoire et optimiser le garbage collector.
Public visé
Développeurs, architectes et chefs de projets techniques.
Prérequis
Avoir suivi cette formation, ou en maîtriser les thèmes abordés :
Objectifs pédagogiques
À l’issue de cette formation, vous serez capable de :
- Implémenter le traitement parallèle et la gestion des accès concurrents
- Appliquer la programmation réflexive et le classloading
- Utiliser les fonctionnalités modernes du langage (lambdas, streams, records)
- Profiler et optimiser des applications Java
- Tester et déboguer des applications en environnement avancé
Programme
Jour 1 - Matin
Aspects avancés de Java
- La programmation concurrente
- Les concepts de la programmation multi-thread :
- Le modèle d’activités de Java (
RunnableetThread) - La création / destruction des threads
- Ordonnancement des threads
- La synchronisation des threads
- Le verrouillage des méthodes et des instructions (
synchronized) - Les moniteurs
- Quelques problèmes du multi-thread
- L’interblocage (caractérisation, évitement, prévention, détection), la famine
- Les extensions du modèle introduites dans Java 5 (
Callable,Future,ExecutorService), les nouvelles collections
- Le modèle d’activités de Java (
Travaux pratiques
- Construction d’une application multi-thread avec contraintes de concurrence
Jour 1 - Après-midi
Aspects avancés : la programmation réflexive
- Le modèle Fork/Join
- Les extensions avec
CompletableFuture - Les divers outils de gestion de la concurrence :
- Les verrous partagés / exclusifs
- Les sémaphores
- Les barrières cycliques
- Les objectifs et les principes
- La découverte dynamique des informations relatives à une classe ou à un objet
- L’instanciation et l’invocation dynamique
Travaux pratiques
- Mise en pratique sur :
- La programmation parallèle
- Le
CompletableFuture - Les sémaphores
Jour 2 - Matin
Implémentation d’un ClassLoader chargeant des classes
- Rôle du compilateur Java
- Rôle des ClassLoaders
- Les différentes zones mémoires de la JVM (Java Virtual Machine) et leur gestion par le GC (Garbage Collector)
- Hiérarchie des différents ClassLoaders
- Vérification du Bytecode
- Chargement dynamique de classe
- Implémenter un ClassLoader
- Manipulation des énumérations
Travaux pratiques
- Quelques exemples de chargement de classes et traitements des annotations personnalisées
Jour 2 - Après-midi
Les nouveautés du switch et Record
- Switch expressions
- Pattern Matching
instanceof - Record (classe de données simplifiée pour DTO)
Travaux pratiques
- Mise en oeuvre des instructions Switch
Jour 3 - Matin
La console JShell Java
- Principe REPL (Read-Eval-Print Loop)
- Présentation de JShell Java
- Fonctionnement interne de JShell
- Utilisation de JShell (exemples)
Process API, HTTP2 API
- L’interface
ProcessHandle - Gestion des processus depuis Java 9
- Présentation de HTTP2 Client
Travaux pratiques
- Programmation d’un cas d’école avec la console JShell
- Mise en pratique d’un client
HttpClientavec Java 9
Jour 3 - Après-midi
Tester ses applications en Java
- Test Driven Development - Découvrir les grands principes du TDD
- Cycle de développement du TDD
- Les 3A : Arrange, Act, Assert
- Remaniement de code : techniques de refactoring en TDD
- Conception émergeante
- Gestion des exceptions
- Gestion des scénarios
- JUnit - Savoir utiliser le framework JUnit pour implémenter des tests
- Tests unitaires
Travaux pratiques
- Utilisation de JUnit
Jour 4 - Matin
D’autres nouveautés Java
- Lambda fonctions
- Streams et Streams parallèles
- La gestion des modules
Travaux pratiques
- Développement d’une application utilisant les Lambdas, Streams et modules
Jour 4 - Après-midi
Le processus d’optimisation
- Analyser
- Coder
- Mesurer pour vérifier
- Les outils
- Profiling
- JVisualVM
- Eclipse MAT
- SoapUI
- JMeter
Travaux pratiques
- Utilisation d’outils de profiling
Gestion mémoire et optimisation
- L’organisation de la mémoire
- Le ramasse-miettes
- Le cycle de vie des objets
- Configurer la mémoire et le GC
- Mesure de la mémoire
- Off Heap
- La gestion de la mémoire et les performances
- Les options de la JVM HotSpot pour le suivi de l’activité du GC
- Fuite de mémoire
- Fuite de ressources
- Optimiser l’utilisation de la mémoire
- Optimiser l’occupation mémoire
Travaux pratiques
- Utilisation des outils d’optimisation mémoire
Modalités d’évaluation des acquis
En cours de formation, par des travaux pratiques. En fin de formation, par un questionnaire d’auto-évaluation.
Voir aussi
Vous serez peut-être intéressés par les formations suivantes :
- Java - Jakarta - Initiation
- Java WebService - REST SOAP
- EJB3 - Enterprise JavaBeans
- Java - Spring Framework - Initiation
- Spring Framework - Niveau avancé
- Hibernate - Mapping objet-relationnel Java
- Java Security
- Clean Code pour Java
- Java - Nouveautés versions 8 à 22
Formation DEV-JAVA-210 — Java - Programmation avancée. Domaine : Développement. Niveau : Intermédiaire. Durée : 4 jours (28 heures). Mots-clés : java, programmation-avancée, multi-threading, perfectionnement. Cylian Formation, Dijon.