← Nieuwste papers
💻 computer science

JEDI: Java Evaluation of Declarative and Imperative Queries

Dit artikel presenteert JEDI, een automatisch gegenereerde benchmark-suite die SQL-query's omzet naar Java om de prestaties van declaratieve Stream API-implementaties te evalueren en te vergelijken met imperatieve baselines, met als doel inefficiënte codepatronen te identificeren en de optimalisatie van de Java Stream API te sturen.

Oorspronkelijke auteurs: Filippo Schiavio, Walter Binder

Gepubliceerd 2026-05-25
📖 6 min leestijd🧠 Diepgaand

Oorspronkelijke auteurs: Filippo Schiavio, Walter Binder

Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dit is een AI-gegenereerde uitleg van het onderstaande artikel. Het is niet geschreven of goedgekeurd door de auteurs. Raadpleeg het oorspronkelijke artikel voor technische nauwkeurigheid. Lees de volledige disclaimer

Stel je een enorm magazijn vol dozen (data) voor, en je moet specifieke items vinden, sorteren en tellen. Je hebt twee manieren om instructies aan je werknemers te geven:

  1. De "Manager"-benadering (Imperatief): Je loopt naar elke werknemer individueel toe en zegt: "Pak deze doos. Check of hij rood is. Zo ja, leg hem in een stapel. Zo nee, gooi hem weg. Pak nu de volgende." Dit is zeer direct en snel, maar vereist veel praten en kan rommelig worden als je duizenden werknemers hebt.
  2. De "Voorman"-benadering (Java Stream API): Je schrijft één elegante brief: "Neem alle dozen, filter op rode, sorteer ze op grootte en tel ze." Je geeft deze brief aan een voorman die uitzoekt hoe hij de werknemers dit laat doen. Dit is voor jou veel makkelijker om te schrijven en te lezen, maar de voorman moet je brief vertalen naar acties, wat soms extra tijd kost.

Dit artikel, getiteld JEDI, draait volledig om het testen hoe goed de "Voorman" (de Java Stream API) presteert in vergelijking met de "Manager" (traditionele code), en het uitzoeken hoe je de Voorman sneller kunt laten werken.

Het Probleem

De Java Stream API is populair omdat het code er schoon en makkelijk te begrijpen maakt (zoals de brief aan de voorman). Ontwikkelaars hebben echter vermoed dat deze "schone" manier van coderen trager is dan de "rommelige" traditionele manier. Het probleem is dat niemand een juiste renbaan (een benchmark) had om dit eerlijk te testen. Zonder een renbaan weten de mensen die de Java-taal bouwen (de "monteurs") niet precies waar de motor stottert, en weten ontwikkelaars niet welke instructies de beste snelheid geven.

De Oplossing: JEDI

De auteurs hebben JEDI (Java Evaluation of Declarative and Imperative Queries) gebouwd. Denk aan JEDI als een gigantische, geautomatiseerde fabriek die standaard databasevragen (geschreven in een taal genaamd SQL, wat een universeel aanvraagformulier is) direct vertaalt naar twee verschillende sets instructies:

  1. Eén set in de "Voorman"-stijl (Streams).
  2. Eén set in de "Manager"-stijl (Imperatieve lussen).

Omdat de fabriek exact dezelfde vraag vertaalt naar beide stijlen, is de vergelijking perfect eerlijk. Het is alsof je twee hardlopers exact hetzelfde parcours geeft en hun tijd neemt om te zien wie sneller is.

Wat Ze Ontdekten

1. Kleine Aanpassingen Maken Een Groot Verschil (De "Filter Fusie")
Soms raakt de Voorman in de war als je hem drie aparte briefjes geeft: "Check op rood", "Check op groot", "Check op zwaar".

  • De Oplossing: De auteurs ontdekten dat het samenvoegen hiervan tot één grote brief ("Check op rood EN groot EN zwaar") de Voorman veel sneller maakt. Het is alsof je een werknemer één duidelijke instructie geeft in plaats van drie verwarrende.
  • Het Resultaat: Deze simpele verandering liet de code in sommige gevallen tot 2,6 keer sneller draaien.

2. De "Een-naar-Veel" Truc
Soms bevat een enkele doos veel kleinere items erin.

  • De Oude Manier: De Voorman zou de doos pakken, openen, één item eruit halen, in een stapel leggen, terugkeren, het volgende eruit halen, en dit herhalen.
  • De Nieuwe Manier: De auteurs vonden een speciaal gereedschap (genaamd mapMulti) dat de Voorman toelaat om de doos open te maken en alle items in één vloeiende beweging tegelijkertijd eruit te gooien.
  • Het Resultaat: Dit was zelfs effectiever dan de eerste tip, waarbij de snelheid vaak verdubbelde.

3. Het Parallelisme Raadsel (Veel Werknemers Gebruiken)
Wanneer je een enorm magazijn hebt, wil je veel werknemers tegelijkertijd gebruiken (parallelle verwerking). Het artikel testte vier verschillende manieren om deze werknemers te organiseren:

  • Het "Strikte Orde"-Team: Iedereen werkt in een rij, waarbij dozen worden doorgegeven. Goed voor het behouden van orde, maar traag.
  • Het "Chaos"-Team: Iedereen pakt willekeurig dozen. Snel, maar moeilijk te managen.
  • Het "Gedeeld Bord"-Team: Iedereen schrijft zijn resultaten op één groot gedeeld whiteboard.
  • Het "Atomaire" Team: Iedereen gebruikt een speciale, high-tech pen die nooit vlekken, zelfs niet als twee mensen tegelijkertijd schrijven.

Het Oordeel: Er is geen enkel "beste" team.

  • Als je zeer weinig groepen items hebt om te sorteren (zoals het sorteren van slechts 4 soorten fruit), zijn het "Strikte Orde"- of "Chaos"-team het snelst, omdat het "Gedeelde Bord" te vol raakt (te veel ruzie over wie er eerst schrijft).
  • Als je duizenden groepen hebt (zoals het sorteren van 10.000 verschillende fruitsoorten), wint het "Gedeelde Bord"-team omdat de ruzie stopt en iedereen zijn eigen sectie kan schrijven zonder anderen aan te botsen.

4. Het Snelheidsverschil
De grote vraag: Is de "Voorman" (Stream) trager dan de "Manager" (Imperatief)?

  • Ja. De traditionele "Manager"-code is consequent sneller, meestal met ongeveer 30% tot 40%.
  • Waarom? De "Voorman" moet tijd besteden aan het vertalen van je elegante brief naar acties. De "Manager" doet het werk direct.
  • Het Goede Nieuws: Het gat is niet zo groot als mensen in het verleden dachten. Het Java-team heeft de motor verbeterd. Echter, voor de absolute snelste prestatie wint de "Manager"-stijl nog steeds.

5. De Afweging: Snelheid versus Gezond Verstand
Het artikel keek ook hoe moeilijk de code is om te lezen.

  • De "Manager"-code (snelst) is als een dichte, verwarrende handleiding. Het is moeilijk te lezen en makkelijk om fouten in te maken.
  • De "Voorman"-code (trager) is als een duidelijk, kort verhaal. Het is veel makkelijker te begrijpen en minder waarschijnlijk dat er fouten in zitten.
  • De Les: Je moet kiezen. Wil je dat de code 30% sneller draait, of wil je dat het 2,5 keer makkelijker is voor mensen om te lezen en onderhouden? Het artikel suggereert dat voor de meeste mensen de "Voorman"-stijl de kleine snelheidsstraf waard is omdat het tijd bespaart op het opsporen van fouten en onderhoud.

Samenvatting

JEDI is een nieuw hulpmiddel dat ontwikkelaars helpt het "kostenplaatje" te begrijpen van het gebruik van de moderne, makkelijk te lezen Java Stream API. Het bewijst dat hoewel de makkelijk te lezen code iets trager is dan de ouderwetse code, je het veel sneller kunt maken door specifieke trucs te gebruiken (zoals het samenvoegen van filters). Het vertelt ontwikkelaars ook precies hoe ze hun werknemers moeten organiseren (parallelle strategieën), afhankelijk van hoeveel data ze hebben. Uiteindelijk geeft het ontwikkelaars een routekaart om code te schrijven die zowel leesbaar als redelijk snel is.

Verdrinkt u in papers in uw vakgebied?

Ontvang dagelijkse digests van de nieuwste papers die bij uw onderzoekswoorden passen — met technische samenvattingen, in uw taal.

Probeer Digest →