O Java 20 chegou oficialmente, com a disponibilidade geral a partir de 21 de março de 2023. Essa versão representa a 10° versão de recursos da plataforma lançada através da cadência semestral padrão. (Você pode esperar o Java 21 para o mês de setembro.)
Existe uma enorme quantidade de informações nas notas de lançamento do Java 20. Neste artigo, destacamos os principais destaques. Recomendamos a leitura do texto “Java 20 sneak peek”, escrito por Mohamed Taman.
Conforme descrito no blog post oficial de lançamento do Java 20, seis dos JEPs entregues nesta versão estão agrupados em três categorias correspondentes ao Projeto Amber (aumento de produtividade do desenvolvedor), Projeto Loom (reinvenção do threading) e Projeto Panama (união do Java a outras plataformas). Existe um outro JEP focado no cálculo de vetores.
Georges Saab, VP Sênior de Desenvolvimento, Java Platform Group, Oracle e Presidente do Conselho Administrativo da OpenJDK, disse que “Por mais de 25 anos, o Java permitiu que os desenvolvedores projetasseme criassem aplicações robustas, escaláveis e seguras de última geração.”
Saab ainda afirmou: “As melhorias inovadoras no Java 20 refletem a visão e os esforços inestimáveis da comunidade global do Java durante toda a existência dessa linguagem de programação. Com o suporte contínuo fornecido pela liderança em tecnologia Java na Oracle, junto da liderança da comunidade, o Java se tornou tão relevante quanto uma linguagem e plataforma contemporâneas que ajudam os desenvolvedores a aumentarem suas produtividades.”
Veja a seguir os sete JEPs incluídos no Java 20.
Projeto Amber
JEP 432: Record patterns (segunda visualização). Aumenta a produtividade do desenvolvedor estendendo a correspondência de padrões para expressar consultas de dados mais sofisticadas e combináveis. Isso ocorre através da melhoria da linguagem de programação Java com padrões de registro para construir os valores guardados. Os padrões de registro e de tipo podem ser aninhados para oferecer navegação e processamento de dados de forma poderosa, declarativa e combinável.
JEP 433: Pattern matching for switch (quarta visualização). Aumenta a produtividade do desenvolvedor, melhorando a semântica do código do Java. Isso é feito aprimorando a linguagem de programação Java com correspondência de padrões para expressões e instruções switch. Estender a correspondência de padrões para switch permite que uma expressão seja testada em vários padrões, cada um com uma ação específica, para que consultas complexas orientadas a dados possam ser expressas de forma concisa e segura.
Projeto Loom
JEP 429: Scoped values (incubadora). Possibilita o compartilhamento de dados imutáveis internamente e entre threads por meio de valores com escopo. Os valores com escopo têm preferência em variáveis de thread local, especialmente com grandes quantidades de threads virtuais, além de oferecem melhorias em diversas áreas, incluindo a facilidade de uso, robustez e desempenho.
JEP 436: Virtual threads (segunda visualização). Elas oferecem threads virtuais leves que reduzem drasticamente o esforço de escrita, manutenção e observabilidade de aplicações simultâneas de alto rendimento. Dentro do Java, as threads virtuais são separadas das threads ou núcleos físicos do processador.
JEP 437: Structured concurrency (segunda incubadora). Simplifica a programação multithread, introduzindo uma API para concorrência estruturada. Essa API trata diversas tarefas simultâneas em threads diferentes dentro de uma única unidade de trabalho, simplificando o tratamento e cancelamento de erros, aumentando a confiança e observabilidade.
-Leia mais: Três ebooks gratuitos para desenvolvimento nativo na nuvem

Projeto Panama
JEP 434: Foreign function and memory API (segunda visualização). Ela apresenta uma API pela qual os programas Java podem interoperar com código e dados fora do ambiente de execução do Java. Ao invocar eficientemente funções externas, ou seja, código fora da JVM, e ao acessar com segurança a memória externa, isto é, memória não gerenciada pela JVM, a API permite que programas Java chamem bibliotecas nativas e processem dados nativos sem a fragilidade e os perigos da Java Native Interface (JNI) antiga.
JEP extra
JEP 438: Vector API (quinta incubadora). Oferece desempenho superior às computações escalares equivalentes, introduzindo uma API para expressar as computações de vetores que sejam compilados com confiança durante a execução ideal das instruções de vetor sobre arquiteturas de CPU suportadas. As APIs de vetores foram incubadas no JDK 16, 17, 18 e 19. O JDK 20 incorpora o feedback dos usuários dessas versões, assim como melhorias de desempenho e aprimoramentos na implementação. Ele usa alguns recursos da JEP 434 que agora estão maduras o suficiente para habilitar essa dependência.
Correções e atualizações
Embora muita da atenção esteja sobre as JEPs no Java 20, e em todas as outras versões do Java, ainda existem milhares de outras atualizações em desempenho, estabilidade e segurança, incluindo:
• Principais grupos nomeados de troca do Datagram Transport Layer Security (DTLS)
• A adição de um novo GarbageCollectorMXBean para reportar a ocorrência e a duração de marcação e limpeza dos tempos de pausa para a lixeira G1
• ChaCha20 intrínseca às plataformas x86_64 e aarch64
• Suporte a Unicode 15.0
• Melhoria nos controles de refinamento de threads simultâneas do G1
• Suporte a versão 42 do Unicode CLDR
• Novos eventos JDK Flight Recorder: jdk.InitialSecurityProperty e jdk.SecurityProviderService
• Melhorias na página Preview API da documentação gerada pelo Javadoc
• Nova opção de linha de comando: jmod –compress
• Suporte a grafemas no BreakIterator
• Atualização de dados de fuso horário, em conformidade com o padrão 2022c
• IDs geradas automaticamente nos cabeçados do Javadoc
Baixe o Java 20 e comece a trabalhar
As implementações de referência do Java SE 20 podem ser obtidas aqui https://jdk.java.net/java-se-ri/20. Caso esteja procurando por compilações do OpenJDK, você pode encontrá-las aqui https://jdk.java.net/20/.
