Evoluções do Java 12

Java 12, lançado em março de 2019, trouxe várias melhorias e evoluções que refletem o compromisso contínuo da comunidade Java em fornecer uma plataforma robusta e moderna para desenvolvedores. Esta versão inclui novas funcionalidades e aprimoramentos significativos que facilitam o desenvolvimento de software. A seguir, destacamos as principais evoluções do Java 12.

1. Switch Expressions (JEP 325)

A introdução das expressões switch como uma feature preview é uma das mudanças mais notáveis no Java 12. Esta melhoria simplifica a sintaxe dos switch tradicionais, tornando o código mais conciso e menos suscetível a erros:

var day = "MONDAY";
var numLetters = switch (day) {
    case "MONDAY", "FRIDAY", "SUNDAY" -> 6;
    case "TUESDAY" -> 7;
    case "THURSDAY", "SATURDAY" -> 8;
    case "WEDNESDAY" -> 9;
    default -> throw new IllegalStateException("Unexpected value: " + day);
};

2. Shenandoah: Low-Pause-Time Garbage Collector (JEP 189)

O Shenandoah é um garbage collector experimental que se concentra em reduzir o tempo de pausa do GC, tornando-o ideal para aplicações que requerem baixa latência. Ele oferece uma alternativa ao ZGC (Garbage Collector de Baixa Latência) introduzido no Java 11.

3. Microbenchmark Suite (JEP 230)

A inclusão de uma suíte de microbenchmark no JDK é uma ferramenta valiosa para os desenvolvedores. Baseada no projeto OpenJDK JMH (Java Microbenchmark Harness), esta suíte facilita a criação e execução de benchmarks para medir o desempenho de diferentes partes do código, ajudando na otimização e na identificação de gargalos.

4. APIs para Compact Number Formatting (JEP 334)

Java 12 introduz novas APIs para formatação de números compactos, facilitando a exibição de números grandes de forma mais legível e concisa. Isso é especialmente útil em aplicações que lidam com grandes volumes de dados numéricos:

NumberFormat fmt = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);
System.out.println(fmt.format(1_000)); // prints "1K"
System.out.println(fmt.format(1_000_000)); // prints "1M"

5. One AArch64 Port, Not Two (JEP 340)

Esta melhoria remove uma das portas AArch64 do JDK, consolidando o suporte a essa arquitetura e simplificando a manutenção do JDK.

6. Default CDS Archives (JEP 341)

Java 12 ativa, por padrão, o Class Data Sharing (CDS), que permite a criação de arquivos de dados de classe compartilhados. Isso melhora o tempo de inicialização das aplicações, proporcionando um desempenho melhor e mais consistente.

7. Prompt e Diagnóstico da VM

  • JEP 344: Abortable Mixed Collections for G1 Introduz a capacidade de cancelar coleções mistas no G1 Garbage Collector se ultrapassarem uma determinada duração, melhorando a previsibilidade do tempo de pausa.
  • JEP 346: Prompt e Diagnóstico da VM Fornece uma forma de obter e exibir informações de diagnóstico da JVM, facilitando a depuração e a manutenção.

8. Raw String Literals (Removido)

Embora tenha sido considerado durante o desenvolvimento do Java 12, o suporte a literais de string brutos (raw string literals) foi removido, adiando essa funcionalidade para versões futuras.

Conclusão

Java 12 continua a tendência de evolução incremental da linguagem, introduzindo funcionalidades que simplificam o desenvolvimento e melhoram o desempenho das aplicações. Com as expressões switch, novos garbage collectors, APIs aprimoradas para formatação de números e melhorias na detecção e diagnóstico da JVM, Java 12 oferece ferramentas poderosas e eficientes para os desenvolvedores.

A adoção dessas evoluções permite um desenvolvimento mais ágil e produtivo, focado mais na lógica de negócios e menos nos detalhes de baixo nível da linguagem. Java continua a se adaptar às necessidades do desenvolvimento moderno, mantendo sua relevância e robustez no mercado de software.

Share this content: