Novidades sobre a atualização JDK 21
Tags: java, oracle, jvm
Published: 2023-09-19 17:54:04

Olá, desenvolvedor, tudo certo? Hoje 19 de setembro lançou a versão 21 da JDK, mas o que esperar da versão 21? 

A versão 21 da JDK é a nova versão LTS, ou seja, é uma versão que receberá suporte durante um período maior do que as demais versões um conceito comum em muitos produtos de software, incluindo sistemas operacionais e linguagens de programação, e é projetado para atender às necessidades de organizações que desejam estabilidade e continuidade em suas implementações de software sendo mantida no normalmente por 5 anos. 

Quais as principais mudanças? 

Com a chegada da JDK 21 diversas funcionalidades foram implementadas, vamos falar um pouco sobre elas. 

Language Feature 

JEP 440: Records Patters 

O JEP 440 tem com o objetivo aprimorar a linguagem de programação Java com padrões de registro descontruindo os valores de registo. Os Padrões de registro e padrões de tipo podem ser aninhados para permitir usam forma poderosa, declarativa e combinável de navegação e processamento de dados. 

Mas afinal, o que é um padrão de registro?  

Um padrão de registro consiste em um tipo de classe de registro e uma lista de padrões (possivelmente vazia) que é usada para comprar os valores dos componentes de registro correspondentes. Por exemplo, dada a declaração: 

`Record Person (String name, String lastName) {} `

O valor Person será registrado como um valor iniciado sem a necessidade da criação de Getters, Setters e seu construtor, sendo muito útil para dtos patterns. 

JEP 441: Pattern Matching for switch 

O JEP 441 tem o objetivo de aperfeiçoar a correspondência de padrões para switch expressões e instruções. Permitindo que uma expressão seja testada em relação a vários padrões, cada um com uma ação diferente, para que consultas complexas orientadas a dados possam ser expressas de forma concisa e segura. Por exemplo, dada a declaração:  

```
static String formatterPatternSwitch(Object obj) { 
    return switch (obj) { 
        case Integer i -> String.format("int %d", i); 
        case Long l    -> String.format("long %d", l); 
        case Double d  -> String.format("double %f", d); 
        case String s  -> String.format("String %s", s); 
        default        -> obj.toString(); 
    }; 
}
```
 
 

Resumo, com o JEP 441 diversas formas de ultilizar o switch foi atualizado e simplificado deixado o java menos verboso e mais limpo, facilitando para quem está começando a aprender a linguagem agora e agilizando proceços repetitivos de desenvolvedores. 

Language Features Previews 

JEP 430: String Templates (Preview) 

O JEP 430 Aprimore a linguagem de programação Java com modelos de string . Os modelos de string complementam os literais de string e blocos de texto existentes do Java, acoplando texto literal com expressões incorporadas e processadores de modelo para produzir resultados especializados. 

Mas por que modelar as strings? O modelamento de strings tem com o objetivo de tornar Interpolação de strings mais segura. (A interpolação de strings é uma técnica que permite incorporar valores de variáveis ou expressões diretamente em uma string, tornando o processo de criação de strings mais conveniente e legível. Em vez de concatenar manualmente strings e variáveis, você pode inserir espaços reservados na string e preenchê-los com os valores desejados.) 

Infelizmente, a conveniência da interpolação tem uma desvantagem: é fácil construir strings que serão interpretadas por outros sistemas, mas que são perigosamente incorretas nesses sistemas e é isso que a JEP 430 busca resolver. 

JEP 443 e JEP 445: Padrões e variáveis sem nome. Classes sem nome e métodos principais de instância (preview) 

JEP 443: Aprimore a linguagem Java com padrões sem nome, que correspondem a um componente de registro sem indicar o nome ou tipo do componente, e variáveis sem nome, que podem ser inicializadas, mas não usadas. Ambos são indicados por um caractere de sublinhado, _. [preview language feature. ](https://openjdk.org/jeps/12)

Evolua a linguagem Java para que os alunos possam escrever seus primeiros programas sem a necessidade de compreender os recursos da linguagem projetada para programas grandes. Longe de usar um dialeto separado de Java, os alunos podem escrever declarações simplificadas para programas de classe única e, em seguida, expandir seus programas para usar recursos mais avançados à medida que suas habilidades aumentam. [preview language feature. ](https://openjdk.org/jeps/12)

Tanto o JEP 443 e o JEP 445 têm com o objetivo diminuir a verbosidade do Java com o objetivo de simplificar para novos programadores em Java. 

Libraries Improvements 

JEP 444: Virtual Threads 

Introduzir threads virtuais na plataforma Java. Threads virtuais são threads leves que reduzem drasticamente o esforço de gravação, manutenção e observação de aplicativos simultâneos de alto rendimento. 

Principais objetivos: 

-  Permita que aplicativos de servidor escritos no estilo simples de thread por solicitação sejam dimensionados com utilização de hardware quase ideal. 
- Habilite o código existente que usa a java.lang.ThreadAPI para adotar threads virtuais com alterações mínimas. 
- Permita fácil solução de problemas, depuração e criação de perfil de threads virtuais com ferramentas JDK existentes. 

- 
JEP 431: Sequenced Collections 

Introduzir novas interfaces para representar coleções com uma ordem de encontro definida. Cada uma dessas coleções possui um primeiro elemento bem definido, um segundo elemento e assim por diante, até o último elemento. Ele também fornece APIs uniformes para acessar seus primeiros e últimos elementos e para processar seus elementos na ordem inversa. 

A estrutura de coleção Java não possui um tipo de coleção que represente uma sequência de elementos com uma ordem de encontro definida. Também carece de um conjunto uniforme de operações que se apliquem a essas coleções. Estas lacunas têm sido uma fonte repetida de problemas e reclamações. 

JEP 452: Key Encapsulation Mechanism API 

Introduzir uma API para mecanismos de encapsulamento de chaves (KEMs), uma técnica de criptografia para proteger chaves simétricas usando criptografia de chave pública. 

O encapsulamento de chave é uma técnica criptográfica moderna que protege chaves simétricas usando criptografia assimétrica ou de chave pública. A técnica tradicional para fazer isso é criptografar uma chave simétrica gerada aleatoriamente com uma chave pública, mas isso requer preenchimento e pode ser difícil de provar ser seguro. Em vez disso, um mecanismo de encapsulamento de chave (KEM) usa propriedades da chave pública para derivar uma chave simétrica relacionada, que não requer preenchimento. 

Library Improvements Previews and Incubator 

JEP 442: Foreign Function & Memory API (Third Preview) 

Introduzir uma API pela qual programas Java possam interoperar com código e dados fora do tempo de execução Java. Ao invocar com eficiência funções externas (ou seja, código fora da JVM) e ao acessar com segurança a memória externa (ou seja, memória não gerenciada pela JVM), a API permite que programas Java chamem bibliotecas nativas e processem dados nativos sem a fragilidade e o perigo de JNI. [Esta é uma API de visualização. ](https://openjdk.org/jeps/12)

JEP 453: Structured Concurrency (Preview) 

Simplifique a programação simultânea introduzindo uma API para simultaneidade estruturada. A simultaneidade estruturada trata grupos de tarefas relacionadas executadas em diferentes threads como uma única unidade de trabalho, simplificando assim o tratamento e cancelamento de erros, melhorando a confiabilidade e aprimorando a observabilidade. [Esta é uma API de visualização.](https://openjdk.org/jeps/12) 

JEP 446: Scoped Values (Preview) 

Introduza valores com escopo definido, valores que podem ser compartilhados com segurança e eficiência em métodos sem usar parâmetros de método. Elas são preferidas às variáveis locais de thread, especialmente ao usar um grande número de threads virtuais. [Esta é uma API de visualização](https://openjdk.org/jeps/12). 

JEP 448: Vector API (Sixth Incubator) 

Introduzir uma API para expressar cálculos vetoriais que sejam compilados de forma confiável em tempo de execução para instruções vetoriais ideais em arquiteturas de CPU suportadas, alcançando assim um desempenho superior aos cálculos escalares equivalentes. 

Performance Improvements 

JEP 439: Generational ZGC 

Melhore o desempenho do aplicativo estendendo o Z Garbage Collector ( ZGC ) para manter gerações separadas para objetos novos e antigos. Isso permitirá que o ZGC colete objetos jovens – que tendem a morrer jovens – com mais frequência. 

Os aplicativos executados com Generational ZGC devem aproveitar 

- Menores riscos de paralisações nas alocações, 
- Menor sobrecarga de memória heap necessária e 
- Menor sobrecarga de CPU de coleta de lixo. 

Esses benefícios devem ocorrer sem redução significativa do rendimento em comparação com ZGC não geracional. 

Stewardship 

JEP 451: Prepare to Disallow the Dynamic Loading of Agents 

Emita avisos quando os agentes são carregados dinamicamente em uma JVM em execução. Esses avisos visam preparar os usuários para uma versão futura que proibirá o carregamento dinâmico de agentes por padrão, a fim de melhorar a integridade por padrão. As ferramentas de manutenção que carregam agentes na inicialização não causarão a emissão de avisos em nenhuma versão. 

Esta foi um breve resumo da JDK 21, a versão LTS do Java. Quaisquer dúvidas estou disponível para explicar o que entendi sobre e para conferir novas notícias e a documentação do Java JDK 21 [Clique aqui](https://www.oracle.com/java/technologies/javase/21all-relnotes.html). 

##