Java News

Java 27 dans IntelliJ IDEA

Read this post in other languages:

Conformément à son cycle de publication semestriel, Java 27 est sorti le 15 septembre 2026. Dans cet article, nous allons voir ce que contient cette version, comment IntelliJ IDEA continue de prendre en charge les dernières versions de Java, et même comment IntelliJ IDEA tire parti de certains des changements apportés au JDK.

Java 27 apporte neuf JEP, dont quatre sont finalisées. En complément, quatre fonctionnalités en préversion continuent leur maturation et une JEP demeure au stade d’incubation.

Même si vous n’utilisez pas IntelliJ IDEA, vous pouvez profiter de son intelligence ailleurs : L’extension LSP d’IntelliJ IDEA : l’intelligence de code Java et Kotlin arrive dans VS Code, Cursor et les workflows agentiques. Cela fournit le même niveau de prise en charge des dernières versions et fonctionnalités de Java, y compris pour les versions en accès anticipé et les fonctionnalités en préversion.

Dans cet article, nous allons commencer par configurer IntelliJ IDEA afin d’utiliser la dernière version de Java.

Utilisation de Java 27 dans IntelliJ IDEA (configuration) 

Vous devrez d’abord télécharger le JDK 27. Vous avez plusieurs façons de faire : vous pouvez le télécharger depuis IntelliJ IDEA, à l’aide d’outils comme SDKMAN! ou asdf, ou l’installer vous-même.

Téléchargement du JDK

Pour télécharger le JDK 27 depuis IntelliJ IDEA, ouvrez Project Structure, allez dans l’onglet Project Settings | Project, ouvrez le menu déroulant du champ SDK et sélectionnez Download JDK. Dans la fenêtre Download JDK qui s’ouvre, définissez Version sur 27, puis, dans le champ Vendor, sélectionnez le fournisseur que vous souhaitez utiliser.

Download JDK

Download JDK – Select vendor

Si vous avez déjà installé le JDK, vous pouvez indiquer à IntelliJ IDEA où se trouve votre installation. Sélectionnez plutôt Add JDK from Disk dans le menu déroulant.

Add JDK from disk

La version du JDK sera automatiquement propagée depuis les paramètres de votre projet vers le terminal, ce qui signifie que vous-même et votre agent pourrez utiliser le bon JDK pour votre projet dans le terminal d’IntelliJ IDEA. Cette fonctionnalité a fait l’objet d’une démonstration dans la vidéo Nouveautés d’IntelliJ IDEA 2026.2.

Si vous utilisez SDKMAN! ou asdf pour gérer vos JDK, IntelliJ IDEA peut lire le fichier .sdkmanrc ou .tool-versions dans votre projet et configurer le JDK automatiquement si vous l’avez déjà installé.

Si vous utilisez SDKMAN! et que la version du JDK spécifiée dans le fichier .sdkmanrc n’est pas encore installée, une indication en ligne apparaîtra dans le fichier pour vous permettre de la télécharger directement depuis l’IDE en exécutant la commande SDKMAN! correspondante. correspondante. Cela fonctionne même si SDKMAN! n’est pas installé, ce qui signifie que cette fonctionnalité est également disponible pour les utilisateurs de Windows.

Pour en savoir plus sur la configuration du JDK, consultez la documentation.

Configuration du niveau de langage

IntelliJ IDEA prend en charge Java 27 dès sa sortie. Dans Project Structure, configurez Language level sur 27 – No new language features.

27 – No new language features

Si vous utilisez des fonctionnalités en préversion, choisissez 27 (Preview) – Primitive types in patterns, instanceof, and switch (5th preview). Notez qu’IntelliJ IDEA met en évidence l’utilisation des fonctionnalités en préversion dans l’éditeur, afin que vous sachiez exactement où vous les utilisez.

27 (Preview) – Primitive types in patterns, instanceof, and switch (5th preview)

Nouvelles fonctionnalités stables de Java 27

Java 27 inaugure 4 nouvelles fonctionnalités stables. Jetons un coup d’œil.

JEP 523 : Faire de G1 le ramasse-miettes par défaut dans tous les environnements

Garbage-First (G1) est le ramasse-miettes par défaut depuis Java 9, à une exception près : les machines disposant d’un seul CPU ou de moins de 1 792 Mo de RAM basculaient sur Serial GC. Cette JEP fait de G1 le ramasse-miettes par défaut de la JVM HotSpot dans tous les environnements, et non plus uniquement dans les environnements serveur, en remplacement du garbage collector Serial.

Le ramasse-miettes G1 a bénéficié d’améliorations (notamment JEP 522 : Ramasse-miettes G1 : améliorer le débit en réduisant la synchronisation dans Java 26), si bien que ses performances sont désormais suffisantes pour remplacer Serial. Pour les applications exécutées dans des environnements aux ressources limitées, qui offrent de meilleures performances avec Serial, celui-ci peut être activé explicitement à l’aide de l’option -XX:+UseSerialGC.

JEP 527 : Échange hybride post-quantique de clés pour TLS 1.3

Cette JEP renforce la sécurité des applications Java nécessitant des communications réseau sécurisées en implémentant des algorithmes d’échange de clés hybrides pour TLS 1.3. Cela permet de se prémunir contre les attaques de type « harvest now, decrypt later » (collecter maintenant, déchiffrer plus tard), lors desquelles un attaquant enregistre aujourd’hui du trafic chiffré dans le but de le déchiffrer une fois que les ordinateurs quantiques seront suffisamment puissants.

JEP 534 : En-têtes d’objets compacts par défaut

Cette JEP fait des en-têtes d’objets compacts la disposition par défaut des en-têtes d’objets dans la JVM HotSpot.

En réduisant la taille des en-têtes d’objet de 96 à 64 bits sur les architectures 64 bits, les en-têtes d’objet compacts diminuent la taille du tas, améliorent la densité de déploiement et augmentent la localité des données.

Les en-têtes d’objets compacts ont été introduits en tant que fonctionnalité expérimentale dans Java 24, puis sont devenus une fonctionnalité activable dans Java 25. Étant donné que les en-têtes d’objet compacts sont désormais activés par défaut, il n’est plus nécessaire de les activer à l’aide d’une option de ligne de commande, comme c’était le cas avec le JDK 25. 

Les applications comportant un grand nombre d’objets bénéficieront particulièrement de ce changement, car l’utilisation d’en-têtes d’objets compacts réduit l’empreinte mémoire de la JVM. Les JetBrains IDEs utilisent cette fonctionnalité et ont constaté des économies de mémoire systématiques lorsqu’elle est activée. En savoir plus.

JEP 536 : Masquage des données JFR internes au sein du processus

Cette JEP améliore JDK Flight Recorder (JFR) en masquant les arguments de ligne de commande ainsi que les valeurs initiales des variables d’environnement et des propriétés système dans les enregistrements avant qu’ils ne quittent le processus, afin d’éviter toute fuite d’informations sensibles.

Fonctionnalités de Java 27 en préversion

Les fonctionnalités en préversion permettent aux développeurs de tester de nouvelles fonctionnalités et d’apporter leur retour d’expérience avant leur finalisation. Les fonctionnalités en préversion peuvent faire l’objet de plusieurs itérations, avec ou sans modifications, avant d’être finalisées et de devenir une partie standard du langage.

IntelliJ IDEA s’efforce de prendre en charge les fonctionnalités en préversion, afin que vous puissiez expérimenter avant qu’elles ne deviennent la norme. Comme ces fonctionnalités sont toujours sujettes à changement, IntelliJ IDEA ne prend en charge les fonctionnalités en préversion que pour le JDK actuel. Pour activer les fonctionnalités en préversion, définissez Language level sur 27 (Preview) – Primitive types in patterns, instanceof, and switch (5th preview).

Java 27 contient quatre fonctionnalités en préversion et une fonctionnalité en incubation. Les fonctionnalités elles-mêmes sont identiques à celles de Java 26, mais certaines d’entre elles ont été révisées dans Java 27. 

JEP 531 : Lazy constants (troisième préversion)

Les lazy constants (constantes à initialisation différée) sont des objets qui contiennent des données immuables. Comme leur nom l’indique, elles sont évaluées de manière différée. Cela présente des avantages par rapport aux champs final, qui sont évalués immédiatement. Avec les lazy constants, les champs ne sont évalués qu’en cas de besoin, ce qui peut améliorer le temps de démarrage.

Pour une explication un peu plus détaillée, consultez la section consacrée aux Lazy constants dans Java 26 avec IntelliJ IDEA.

Les lazy constants ont été inaugurées dans Java 25 (en tant que valeurs stables) et ont connu des modifications importantes dans Java 26. L’API a fait l’objet de nouvelles révisions avec Java 27.  

JEP 532 : Types primitifs dans les patterns, instanceof et switch (5e préversion)

Comme expliqué dans Java 26 dans IntelliJ IDEA, cette fonctionnalité étend la correspondance de motifs afin de prendre en charge tous les types primitifs dans les contextes de motifs, notamment avec instanceof et switch. Cette fonctionnalité supprime certaines limitations de la correspondance de motifs, permettant de comparer, tester et convertir des valeurs de types primitifs dans ces constructions en toute sécurité. La suppression des casts manuels non sécurisés (susceptibles de provoquer des bugs subtils) et des vérifications de plage a amélioré la sécurité et la lisibilité du code. Cette fonctionnalité est toujours en préversion dans Java 27, sans changement par rapport à la version de Java 26.

Exemple rapide

Examinons rapidement un exemple d’utilisation des types primitifs dans des expressions switch avec des patterns de garde.

int itemDiscountPercentage(int items) {
   return switch (items) {
       case 2 -> 5;
       case 3, 4 -> 10;
       case int i when i >= 5 -> 20;
       default -> 0;
   };
}

Nous pouvons ajouter une Javadoc à cette méthode pour expliquer son fonctionnement. Depuis Java 23 (JEP 467), on peut écrire de la Javadoc en Markdown. Si votre projet utilise JDK 23 ou une version ultérieure, IntelliJ IDEA insérera par défaut des commentaires de documentation Markdown lorsque vous utilisez l’action contextuelle Add Javadoc.

Add JavaDoc

Remarque : si vous préférez utiliser des commentaires classiques plutôt que le Markdown, ouvrez Settings, allez dans Editor | Code Style | Java | Code Generation | Comment Code, puis décochez l’option Prefer documentation line comments.

Prefer documentation line comments

IntelliJ IDEA peut convertir les commentaires Javadoc en Markdown grâce à l’action contextuelle Convert to Markdown documentation comment.

Convert to Markdown documentation comment

Vous trouverez une explication plus détaillée de cette fonctionnalité dans cette section de Java 23 et IntelliJ IDEA.

JEP 533 : Concurrence structurée (7e préversion)

Comme expliqué dans Java 26 dans IntelliJ IDEA, la concurrence structurée nous offre de meilleurs « idiomes » pour le code multithread, ce qui permet au code de mieux correspondre au modèle mental de l’utilisateur. 

La concurrence structurée considère les groupes de tâches liées s’exécutant dans différents threads comme des unités de travail uniques. Cela améliore la lisibilité et l’observabilité ; le code concurrent est donc plus facile à comprendre et à appréhender. Cela permet également d’éliminer les fuites de threads et les délais d’annulation. 

Pour en savoir plus sur la concurrence structurée et son fonctionnement avec les autres fonctionnalités du projet Loom, consultez mon précédent article de blog, Project Loom in IntelliJ IDEA : Virtual Threads, Scoped Values, and Structured Concurrency (Projet Loom dans IntelliJ IDEA : threads virtuels, valeurs à portée limitée et concurrence structurée).

Comme mentionné dans cet article, il existe un live template permettant de générer rapidement la structure de base d’un StructuredTaskScope. Vous pouvez afficher la liste des live templates disponibles dans IntelliJ IDEA à l’aide du raccourci (⌘J sur macOS / Ctrl+J sous Windows et Linux).

Vous pouvez également utiliser la complétion des commandes : saisissez .. pour afficher la liste de toutes les commandes pertinentes dans le contexte actuel. Vous pouvez même saisir une partie du nom de la commande (par exemple « live » pour la commande Afficher les modèles dynamiques), et la commande correspondante apparaîtra parmi les résultats de la complétion classique.

href=”https://www.jetbrains.com/help/idea/using-live-templates.html” target=”_blank” rel=”noopener”>live templates disponibles dans IntelliJ IDEA à l’aide du raccourci (⌘J sous macOS/Ctrl+J sous Windows et Linux). Vous pouvez également utiliser la complétion des commandes : saisissez .. et une liste de toutes les commandes pertinentes dans votre contexte actuel s’affichera. Vous pouvez même saisir une partie du nom de la commande (par exemple « live » pour Show live templates), et la commande correspondante s’affichera parmi les suggestions de saisie semi-automatique.

Vous pouvez lancer des recherches dans la liste des live templates, aussi bien par nom que par description. Si l’on cherche « structured », on trouvera le live template sts.

Use command completion to Show live templates

Pour en savoir plus sur la complétion de commande, consultez mon précédent article : Universal Entry Point : A Single Entry Point for Context-Aware Coding Assistance (Point d’entrée universel : un point d’entrée unique pour une assistance au codage contextuelle).

JEP 538 : Encodages PEM des objets cryptographiques (3e préversion)

Comme décrit dans Java 26 dans IntelliJ IDEA, cette JEP fournit une API en préversion pour l’encodage et le décodage d’objets cryptographiques (clés, certificats et listes de révocation de certificats) vers et depuis le format PEM (Privacy-Enhanced Mail).

L’API a fait l’objet de nouvelles modifications dans Java 27 par rapport à la version précédente.

Fonctionnalités de Java 27 en incubation

Les modules d’incubation sont des API expérimentales. Il s’agit explicitement d’API et d’outils non finalisés, mis à la disposition des développeurs à des fins d’essai. Contrairement aux fonctionnalités en préversion, les fonctionnalités en incubation peuvent faire l’objet de modifications importantes, voire être supprimées dans les versions futures. Elles ne sont pas destinées à un usage en production.

Pour utiliser une fonctionnalité en incubation, vous devez explicitement ajouter le module lors de l’exécution du code, en utilisant l’option de ligne de commande --add-modules pour ce module spécifique.

Si vous exécutez le code à partir d’IntelliJ IDEA, vous pouvez ajouter des options de ligne de commande aux configurations d’exécution de votre application. Sélectionnez la configuration d’exécution de votre programme, puis cliquez sur les trois points pour accéder à More Actions. Sélectionnez Edit pour ouvrir Run/Debug Configurations. Cliquez sur le lien Modify Options, puis, dans la fenêtre contextuelle Add Run Options, sélectionnez Add VM Options. Un nouveau champ s’affichera avec l’indication VM Options. Ajoutez l’option de ligne de commande à ce champ.

Add VM Options

JEP 537 : API Vector (12e incubation)

Comme indiqué dans Java 26 dans IntelliJ IDEA, cette JEP introduit une API qui permet aux développeurs d’exprimer des calculs vectoriels qui se compilent de manière fiable en instructions vectorielles optimales sur les processeurs pris en charge. Les opérations vectorielles permettent d’effectuer davantage de travail au cours d’un même cycle CPU, ce qui peut entraîner des gains de performance significatifs.

Comme il s’agit d’un module en incubation, vous devrez utiliser une option de ligne de commande pour ajouter le module explicitement, comme décrit ci-dessus. Pour utiliser l’API Vector, ajoutez l’option de ligne de commande suivante : --add-modules jdk.incubator.vector.

L’API Vector n’a connu aucun changement dans Java 27 par rapport à Java 26. Cette fonctionnalité restera en incubation jusqu’à ce que les fonctionnalités requises du Projet Valhalla passent en préversion.

Autres changements : améliorations du débogueur

Outre les JEP, le JDK 27 apporte des corrections de bugs, comme JDK-6960970. Le débogueur était très lent lors de l’exécution pas à pas. Ce problème a été corrigé dans le JDK 27 et l’exécution pas à pas dans le débogueur est désormais plus rapide. Nos ingénieurs ont rétroporté ce correctif dans JetBrains Runtime (JBR) 25, afin d’accélérer l’exécution pas à pas lors du débogage du code d’IntelliJ IDEA lui-même. Cela montre qu’il est possible de rétroporter cette modification vers Java 25 et qu’elle fonctionne correctement. Si vous souhaitez profiter de cette modification, vous pouvez utiliser JBR 25 ou demander à votre fournisseur de rétroporter cette modification.

Futures orientations

Des fonctionnalités du projet Valhalla commencent à faire leur apparition dans Java. Les objets valeurs (JEP 401) et l’initialisation stricte des champs dans la JVM (JEP 539) ont tous deux été retenus comme fonctionnalités en préversion du JDK 28. Si vous souhaitez essayer ces fonctionnalités, il n’est donc plus nécessaire de télécharger une distribution Valhalla spécifique. Vous pouvez télécharger la version EA du JDK 28 (accès anticipé). Cette version est disponible au téléchargement directement depuis IntelliJ IDEA.

Si vous avez déjà téléchargé le JDK 28 EA, indiquer à IntelliJ IDEA où se trouve votre installation.

Conclusion

Bien qu’il ne s’agisse pas d’une version LTS, Java 27 apporte des améliorations en matière de sécurité et de performances, et a fait évoluer plusieurs fonctionnalités en préversion importantes. IntelliJ IDEA prend en charge Java 27 dès sa sortie, et continuera de prendre en charge les dernières fonctionnalités Java. N’hésitez pas à nous faire part de vos commentaires.

Auteur de l’article original en anglais :

Marit van Dijk

Marit van Dijk

Discover more