← Derniers articles
💻 computer science

JEDI: Java Evaluation of Declarative and Imperative Queries

Cet article présente JEDI, une suite de tests générée automatiquement qui convertit des requêtes SQL en Java pour évaluer et comparer les performances des implémentations déclaratives de l'API Stream par rapport à des bases impératives, visant à identifier des motifs de code inefficaces et à guider l'optimisation de l'API Stream de Java.

Auteurs originaux : Filippo Schiavio, Walter Binder

Publié 2026-05-25
📖 7 min de lecture🧠 Analyse approfondie

Auteurs originaux : Filippo Schiavio, Walter Binder

Article original sous licence CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Ceci est une explication générée par l'IA de l'article ci-dessous. Elle n'a pas été rédigée ni approuvée par les auteurs. Pour une précision technique, consultez l'article original. Lire la clause de non-responsabilité complète

Imaginez que vous possédiez un immense entrepôt rempli de boîtes (données), et que vous deviez trouver des articles spécifiques, les trier et les compter. Vous avez deux façons de donner des instructions à vos ouvriers :

  1. L'approche « Manager » (Impérative) : Vous vous approchez de chaque ouvrier individuellement et dites : « Prends cette boîte. Vérifie si elle est rouge. Si oui, mets-la dans un tas. Si non, jette-la. Maintenant, prends la suivante. » C'est très direct et rapide, mais cela nécessite beaucoup de bavardage et peut devenir désordonné si vous avez des milliers d'ouvriers.
  2. L'approche « Contremaître » (API Stream Java) : Vous écrivez une note unique et élégante : « Prenez toutes les boîtes, filtrez celles qui sont rouges, triez-les par taille et comptez-les. » Vous remettez cette note à un contremaître qui détermine comment faire exécuter cela aux ouvriers. C'est beaucoup plus facile à écrire et à lire pour vous, mais le contremaître doit traduire votre note en actions, ce qui prend parfois du temps supplémentaire.

Ce papier, intitulé JEDI, porte entièrement sur le test des performances du « Contremaître » (l'API Stream Java) par rapport au « Manager » (le code traditionnel), et sur la détermination de la manière de rendre le Contremaître plus rapide.

Le Problème

L'API Stream Java est populaire car elle rend le code propre et facile à comprendre (comme la note au contremaître). Cependant, les développeurs soupçonnaient que cette façon « propre » d'écrire du code était plus lente que la façon « désordonnée » traditionnelle. Le problème est que personne n'avait de véritable piste d'essai (un benchmark) pour tester cela équitablement. Sans piste d'essai, les personnes qui construisent le langage Java (les « mécaniciens ») ne savent pas exactement où le moteur bronche, et les développeurs ne savent pas quelles instructions offrent la meilleure vitesse.

La Solution : JEDI

Les auteurs ont construit JEDI (Java Evaluation of Declarative and Imperative Queries). Imaginez JEDI comme une usine gigantesque et automatisée qui prend des requêtes de base de données standard (écrites dans un langage appelé SQL, qui est comme un formulaire de demande universel) et les traduit instantanément en deux ensembles d'instructions différents :

  1. Un ensemble utilisant le style « Contremaître » (Streams).
  2. Un ensemble utilisant le style « Manager » (boucles impératives).

Comme l'usine traduit la même question exacte dans les deux styles, la comparaison est parfaitement équitable. C'est comme donner à deux coureurs exactement le même parcours et chronométrer pour voir qui est le plus rapide.

Ce qu'ils ont découvert

1. De petits ajustements font une grande différence (La « Fusion de filtres »)
Parfois, le Contremaître se confond si vous lui donnez trois notes séparées : « Vérifiez si rouge », « Vérifiez si grand », « Vérifiez si lourd ».

  • La Solution : Les auteurs ont découvert que combiner ces éléments en une seule grande note (« Vérifiez si rouge ET grand ET lourd ») rend le Contremaître beaucoup plus rapide. C'est comme donner à un ouvrier une instruction claire au lieu de trois instructions confuses.
  • Le Résultat : Ce simple changement a permis d'exécuter le code jusqu'à 2,6 fois plus vite dans certains cas.

2. L'astuce « Un-à-Plusieurs »
Parfois, une seule boîte contient plusieurs petits objets à l'intérieur.

  • L'Ancienne Façon : Le Contremaître prendrait la boîte, l'ouvrirait, en sortirait un objet, le mettrait dans un tas, retournerait, en sortirait le suivant, et répéterait.
  • La Nouvelle Façon : Les auteurs ont trouvé un outil spécial (appelé mapMulti) qui permet au Contremaître d'ouvrir la boîte et de déverser tous les objets d'un coup, d'un seul mouvement fluide.
  • Le Résultat : Cela s'est révélé encore plus efficace que le premier conseil, doublant souvent la vitesse.

3. Le Puzzle du Parallélisme (Utilisation de nombreux ouvriers)
Lorsque vous avez un immense entrepôt, vous voulez utiliser de nombreux ouvriers à la fois (traitement parallèle). Le papier a testé quatre façons différentes d'organiser ces ouvriers :

  • L'Équipe « Ordre Strict » : Tout le monde travaille en file, passant les boîtes. Bon pour maintenir l'ordre, mais lent.
  • L'Équipe « Chaos » : Tout le monde attrape des boîtes au hasard. Rapide, mais difficile à gérer.
  • L'Équipe « Tableau Partagé » : Tout le monde écrit ses résultats sur un seul grand tableau blanc partagé.
  • L'Équipe « Atomique » : Tout le monde utilise un stylo spécial haute technologie qui ne bave jamais, même si deux personnes écrivent en même temps.

Le Verdict : Il n'y a pas d'équipe « meilleure » unique.

  • Si vous avez très peu de groupes d'articles à trier (comme trier seulement 4 types de fruits), les équipes « Ordre Strict » ou « Chaos » sont les plus rapides car le « Tableau Partagé » devient trop encombré (trop de disputes sur qui écrit en premier).
  • Si vous avez des milliers de groupes (comme trier 10 000 types de fruits différents), l'équipe « Tableau Partagé » gagne car les disputes cessent, et chacun peut écrire sa propre section sans heurter les autres.

4. L'Écart de Vitesse
La grande question : le « Contremaître » (Stream) est-il plus lent que le « Manager » (Impératif) ?

  • Oui. Le code traditionnel « Manager » est constamment plus rapide, généralement d'environ 30 % à 40 %.
  • Pourquoi ? Le « Contremaître » doit passer du temps à traduire votre note élégante en actions. Le « Manager » fait simplement le travail immédiatement.
  • La Bonne Nouvelle : L'écart n'est pas aussi énorme que les gens le pensaient dans le passé. L'équipe Java a amélioré le moteur. Cependant, pour des performances absolument maximales, le style « Manager » gagne toujours.

5. Le Compromis : Vitesse vs Sanity
Le papier a également examiné la difficulté de lecture du code.

  • Le code « Manager » (le plus rapide) ressemble à un manuel d'instructions dense et confus. Il est difficile à lire et facile de faire des erreurs.
  • Le code « Contremaître » (plus lent) ressemble à une histoire claire et courte. Il est beaucoup plus facile à comprendre et moins susceptible de contenir des erreurs.
  • La Leçon : Vous devez choisir. Voulez-vous que le code s'exécute 30 % plus vite, ou voulez-vous qu'il soit 2,5 fois plus facile pour les humains à lire et à maintenir ? Le papier suggère que pour la plupart des gens, le style « Contremaître » vaut la petite pénalité de vitesse car il économise du temps sur le débogage et la maintenance.

Résumé

JEDI est un nouvel outil qui aide les développeurs à comprendre le « coût » de l'utilisation de l'API Stream Java moderne et facile à lire. Il prouve que bien que le code facile à lire soit légèrement plus lent que le code à l'ancienne, vous pouvez le rendre beaucoup plus rapide en utilisant des astuces spécifiques (comme la combinaison de filtres). Il indique également aux développeurs exactement comment organiser leurs ouvriers (stratégies parallèles) en fonction de la quantité de données qu'ils ont. En fin de compte, il offre aux développeurs une feuille de route pour écrire du code à la fois lisible et raisonnablement rapide.

Noyé(e) sous les articles dans votre domaine ?

Recevez des digests quotidiens des articles les plus récents correspondant à vos mots-clés de recherche — avec des résumés techniques, dans votre langue.

Essayer Digest →