Un historique des nouveautés de java au fil des versions
| **Java** | **Années** | **Nouveautés langage** | **Nouveautés Jvm / GC / outils** |
| ----------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 22 - **25** | 2024 - 2025 | - `_` : variables non nommées et patterns<br>- **/// javadoc en Markdown**<br>- **Stream gatherers**<br>- Amélioration de la cryptograhpie<br>- mécanismes d'encapsulation resistants au quantique<br>- API Key Derivation Function<br>- **Déclaration d'import de modules**<br>- void main()<br>- IO.println()<br>- Corps de constructeurs flexibles<br>- **Fichiers de sources compacts et méthodes main d'instance**<br><br>Petits veinards | - `java` : lancement de programmes multi-sources multi-fichiers<br>- Optimisations du garbage collector G1<br>- Optimisation : Object compact headers<br>- Foreign functions et Memory API<br>- Mode générationnel du garbage collector ZGC par défaut<br>- Optimisation : **Ahead-of-Time Class Loading & Linking**<br>- Class file API<br>- Suppression du portage 32 bits x86<br>- API Scoped values<br>- Ahead-of-Time Command-Line Ergonomics<br>- Ahead-of-Time Method Profiling<br>- Java Flight Recorder<br>- amélioration de stabilité<br>- methods timing and tracing<br>- Garbage collector Shenandoah : mode générationnel |
| 18 - **21** | 2022 - 2023 | 1. SequencedCollections: SequencedSet, SequencedMap,...<br>2. UTF-8 par défaut<br>3. Record patterns<br>4. Pattern matching pour switch<br>5. Virtual Threads<br>6. API KEM : amélioration de la cryptographie | - **jwebserver** : web server simple java, SimpleFileServer<br>- Réimplémentation de la reflection pour optimisation<br>- ZGC : mode generationnel |
| 12 - **17** | 2019 - 2021 | 1. Helpful NullPointerExceptions<br>2. **Blocs de texte """**<br>3. Pattern Matching pour instanceof<br>4. **Records**<br>5. **sealed** : classes scellées | 1. Amélioration de garbage collectors<br>2. Garbage collectors ZGC, Shenandoah<br>3. Migration du code source Java sur Git et GitHub<br>4. Optimisation : Elastic metaspace<br>5. **jpackage** : outil en CLI pour packager des applications java auto porteuses |
| 10 - **11** | 2018 | 1. var : inférence de type de variables locales<br>2. Http Client<br>3. TLS 1.3<br>4. JavaFx, JavaEE et Corba, sortent du JDK | 1. Optimisation de mémoire et de temps de démarrage : Application class-data sharing<br>2. Parallel full GC pour G1<br>3. Flight Recorder : analyseur de performances<br>4. Lancement d'un fichier seul : java Monfichier.java |
| 9 | 2017 | 1. Jigsaw : modules<br>2. Fabriques pour les collections : List.of(), Map.of(), ...<br>3. jShell : Repl java<br>4. Amélioration des perfs du moteur de rendu graphique<br>5. Javadoc HTML5 avec recherche | 1. Multi-release des fichiers Jars<br>2. Garbage collector G1 par défaut<br>3. Meilleure performance pour les chaines de caractères<br>4. jlink: permet de créer une image personnalisée optimisée<br>5. AOT (Ahead of Time) compilation : compilation classes en code natif via GraalVM |
| **8** | 2014 | 1. **Lambdas et Streams**, functional interfaces, Predicate<br>2. Références de méthodes<br>3. Interfaces : Méthodes par défaut, méthodes static<br>4. API java.time<br>5. Annotations sur les types | 1. **jdeps** : outil en CLI pour analyser les dépendances d'une application Java |
| 7 | 2011 | 1. Notation binaire et formattage d'expressions numériques<br>2. Switch sur les String<br>3. Inférence de type sur la création de generics <><br>4. Exceptions: try with resources, multicatch<br>5. nio : nouvelle API pour les I/O | 1. **Support des langages dynamiques (InvokeDynamic) dans le bytecode**<br>2. Tiered compilation<br>3. Compressed Oops (optimisation pour les jvm 64bits)<br>4. Escape analysis<br>5. Amélioration du garbage collector ParallelGC pour architectures NUMA |
| 1.6 | 2006 | 1. JDBC 3.0<br>2. **XML et Webservices**<br>3. StaX : streaming API for XML<br>4. JaxB 2.0 : serialiseur XML<br>5. Jax-Ws : Bindings Soap et web-services<br>6. AWT/Swing : amélioration de l'intégration aux systèmes d'exploitation<br>7. Collections : nouvelles interfaces : Deque, NavigableSet, NavigableMap | 1. Optimisation :<br>2. Class File Specification Update<br>3. Performance : synchronisation, compilation |
| **5** | 2004 | 1. **API de concurrence** : ConcurrentMap, Executor, Callable, CompletionService, RunnableFuture, Semaphore, Atomic...<br>2. **Métaprogrammation par annotations**<br>3. **Generics**<br>4. Nouveautés du langage<br>5. Autoboxing des types primitifs<br>6. **enum : types énumérés type-safe**<br>7. **for (Type variable : iterable) : itérations simplifiées**<br>8. foo(Type ... args) : Méthodes à arguments variables (varargs)<br>9. printf("foo %lf bar %lf",2.5d, 2d) : nouvelle méthode printf)<br>10. Scanner : gestion des flux standards<br>11. **import static** | 1. API de management<br>2. API JMX : Java management extensions<br>3. JVMTI : profiling natif |
| **1 - 1.4** | 1996 - 2002 | Omis pour brieveté | Omis pour brieveté |
Evolutions majeures de Java
https://en.wikipedia.org/wiki/Java_version_history