← Últimos artigos
💻 computer science

JEDI: Java Evaluation of Declarative and Imperative Queries

Este artigo apresenta o JEDI, um conjunto de benchmarks gerado automaticamente que converte consultas SQL em Java para avaliar e comparar o desempenho de implementações declarativas da Stream API em relação a baselines imperativas, visando identificar padrões de código ineficientes e orientar a otimização da Java Stream API.

Autores originais: Filippo Schiavio, Walter Binder

Publicado 2026-05-25
📖 6 min de leitura🧠 Leitura aprofundada

Autores originais: Filippo Schiavio, Walter Binder

Artigo original sob licença CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Esta é uma explicação gerada por IA do artigo abaixo. Não foi escrita nem endossada pelos autores. Para precisão técnica, consulte o artigo original. Ler aviso legal completo

Imagine que você tem um armazém enorme cheio de caixas (dados) e precisa encontrar itens específicos, organizá-los e contá-los. Você tem duas maneiras de dar instruções aos seus trabalhadores:

  1. A Abordagem "Gerente" (Imperativa): Você se aproxima de cada trabalhador individualmente e diz: "Pegue esta caixa. Verifique se é vermelha. Se sim, coloque-a em uma pilha. Se não, jogue-a fora. Agora pegue a próxima." Isso é muito direto e rápido, mas exige muita conversa e pode ficar confuso se você tiver milhares de trabalhadores.
  2. A Abordagem "Capataz" (API de Streams do Java): Você escreve uma única nota elegante: "Pegue todas as caixas, filtre as vermelhas, organize-as por tamanho e conte-as." Você entrega essa nota a um capataz que descobre como fazer os trabalhadores executarem isso. Isso é muito mais fácil para você escrever e ler, mas o capataz precisa traduzir sua nota em ações, o que às vezes leva tempo extra.

Este artigo, intitulado JEDI, trata de testar o quão bem o "Capataz" (a API de Streams do Java) se sai em comparação com o "Gerente" (código tradicional) e de descobrir como fazer o Capataz trabalhar mais rápido.

O Problema

A API de Streams do Java é popular porque torna o código limpo e fácil de entender (como a nota para o capataz). No entanto, os desenvolvedores suspeitavam que essa maneira "limpa" de escrever código é mais lenta do que a maneira "confusa" tradicional. O problema é que ninguém tinha uma pista de corrida adequada (um benchmark) para testar isso de forma justa. Sem uma pista de corrida, as pessoas que constroem a linguagem Java (os "mecânicos") não sabem exatamente onde o motor está falhando, e os desenvolvedores não sabem quais instruções oferecem a melhor velocidade.

A Solução: JEDI

Os autores criaram o JEDI (Avaliação de Consultas Declarativas e Imperativas em Java). Pense no JEDI como uma fábrica gigante e automatizada que recebe perguntas padrão de banco de dados (escritas em uma linguagem chamada SQL, que é como um formulário de solicitação universal) e as traduz instantaneamente em dois conjuntos diferentes de instruções:

  1. Um conjunto usando o estilo "Capataz" (Streams).
  2. Um conjunto usando o estilo "Gerente" (loops imperativos).

Como a fábrica traduz a mesma pergunta exata para ambos os estilos, a comparação é perfeitamente justa. É como dar a dois corredores o mesmo caminho exato e cronometrá-los para ver quem é mais rápido.

O Que Eles Descobriram

1. Pequenos Ajustes Fazem uma Grande Diferença (A "Fusão de Filtros")
Às vezes, o Capataz fica confuso se você der a ele três notas separadas: "Verifique se é vermelha", "Verifique se é grande", "Verifique se é pesada".

  • A Correção: Os autores descobriram que combinar essas notas em uma única grande ("Verifique se é vermelha E grande E pesada") torna o Capataz muito mais rápido. É como dar a um trabalhador uma instrução clara em vez de três confusas.
  • O Resultado: Essa simples mudança fez o código executar até 2,6 vezes mais rápido em alguns casos.

2. O Truque "Um-para-Muitos"
Às vezes, uma única caixa contém muitos itens menores dentro dela.

  • A Maneira Antiga: O Capataz pegaria a caixa, abriria, retiraria um item, colocaria em uma pilha, voltaria, retiraria o próximo e repetiria.
  • A Maneira Nova: Os autores encontraram uma ferramenta especial (chamada mapMulti) que permite ao Capataz abrir a caixa e despejar todos os itens de uma só vez, em um movimento suave.
  • O Resultado: Isso foi ainda mais eficaz do que o primeiro conselho, frequentemente dobrando a velocidade.

3. O Quebra-Cabeça da Paralelização (Usando Muitos Trabalhadores)
Quando você tem um armazém enorme, quer usar muitos trabalhadores ao mesmo tempo (processamento paralelo). O artigo testou quatro maneiras diferentes de organizar esses trabalhadores:

  • A Equipe "Ordem Estrita": Todos trabalham em fila, passando caixas adiante. Bom para manter a ordem, mas lento.
  • A Equipe "Caos": Todos pegam caixas aleatoriamente. Rápido, mas difícil de gerenciar.
  • A Equipe "Quadro Compartilhado": Todos escrevem seus resultados em um único quadro branco gigante compartilhado.
  • A Equipe "Atômica": Todos usam uma caneta especial de alta tecnologia que nunca mancha, mesmo se duas pessoas escreverem ao mesmo tempo.

O Veredito: Não há uma única equipe "melhor".

  • Se você tiver muito poucos grupos de itens para organizar (como organizar apenas 4 tipos de frutas), as equipes "Ordem Estrita" ou "Caos" são as mais rápidas porque o "Quadro Compartilhado" fica muito lotado (muita discussão sobre quem escreve primeiro).
  • Se você tiver milhares de grupos (como organizar 10.000 tipos diferentes de frutas), a equipe "Quadro Compartilhado" vence porque a discussão cessa e todos podem escrever sua própria seção sem esbarrar nos outros.

4. A Lacuna de Velocidade
A grande pergunta: O "Capataz" (Stream) é mais lento que o "Gerente" (Imperativo)?

  • Sim. O código tradicional do "Gerente" é consistentemente mais rápido, geralmente em cerca de 30% a 40%.
  • Por quê? O "Capataz" precisa gastar tempo traduzindo sua nota elegante em ações. O "Gerente" apenas faz o trabalho imediatamente.
  • A Boa Notícia: A lacuna não é tão grande quanto as pessoas pensavam no passado. A equipe do Java tem melhorado o motor. No entanto, para o desempenho absolutamente mais rápido, o estilo "Gerente" ainda vence.

5. O Trade-off: Velocidade vs. Sanidade
O artigo também analisou o quão difícil é ler o código.

  • O código do "Gerente" (mais rápido) é como um manual de instruções denso e confuso. É difícil de ler e fácil de cometer erros.
  • O código do "Capataz" (mais lento) é como uma história clara e curta. É muito mais fácil de entender e menos propenso a erros.
  • A Lição: Você tem que escolher. Você quer que o código execute 30% mais rápido ou quer que seja 2,5 vezes mais fácil para humanos lerem e manterem? O artigo sugere que, para a maioria das pessoas, o estilo "Capataz" vale a pequena penalidade de velocidade porque economiza tempo na depuração e manutenção.

Resumo

O JEDI é uma nova ferramenta que ajuda os desenvolvedores a entender o "custo" de usar a moderna e fácil de ler API de Streams do Java. Ele prova que, embora o código fácil de ler seja ligeiramente mais lento que o código antigo, você pode torná-lo muito mais rápido usando truques específicos (como combinar filtros). Também diz aos desenvolvedores exatamente como organizar seus trabalhadores (estratégias paralelas) dependendo da quantidade de dados que possuem. Em última análise, oferece aos desenvolvedores um roteiro para escrever código que seja tanto legível quanto razoavelmente rápido.

Afogado em artigos na sua área?

Receba digests diários dos artigos mais recentes que correspondam às suas palavras-chave de pesquisa — com resumos técnicos, no seu idioma.

Experimentar Digest →