O JDK 22 está chegando, sendo lançado em 19 de março. Podemos acompanhar a live de lançamento aqui https://www.youtube.com/watch?v=AjjAZsnRXtE a partir das 14 horas (horário de Brasilia)
No total, são 12 features (JEPs) a serem liberadas no JDK 22. Classificadas em final features e preview features. 4 final features, 7 preview features e 1 feature incubada. Além de inúmeros bugs corrigidos e pequenas outras novas features. O release notes pode ser acessado aqui.
Final Features
Reduzir a latência implementando a fixação de região no G1, para que a coleta de lixo não precise ser desativada durante regiões críticas da Java Native Interface (JNI). Aborda problemas de travamento de threads porque foram referenciados por objetos usados pelo código nativo. Com esta alteração, o G1 manterá os objetos nativos na região onde residem enquanto continua a executar o coletor de lixo.
Uma API que permite que programas Java chamem bibliotecas nativas e processem dados nativos sem a fragilidade e o perigo de JNI. Atualmente, os desenvolvedores Java ainda enfrentam obstáculos significativos no acesso a um tipo importante de recurso não-Java: código e dados na mesma máquina que a JVM, mas fora da JVM.
Melhorar a linguagem de programação Java com variáveis e padrões sem nome, que podem ser usados quando declarações de variáveis ou padrões aninhados são necessários, mas nunca usados. Ambos são indicados pelo caractere de sublinhado, _. Um exemplo de uso de variáveis sem nome:
static int count(Iterable<Order> orders) {
int total = 0;
for (Order _ : orders) // Unnamed variable
total++;
return total;
}
Aprimora o inicializador de aplicativos Java para poder executar um programa fornecido como vários arquivos de código-fonte Java. Isso tornará a transição de programas pequenos para programas maiores mais gradual, permitindo que os desenvolvedores escolham se e quando se dar ao trabalho de configurar uma ferramenta de compilação. Este é um recurso que já existe desde o Java 11 (JEP 330) e esta JEP realizou melhorias.
Preview Features
Permitir que instruções sejam criadas antes da chamada a super() dentro de construtores.
Atualmente, para garantir que os construtores sejam executados de cima para baixo, a linguagem Java exige que, no corpo de um construtor, qualquer invocação explícita de outro construtor apareça como a primeira instrução; se nenhuma invocação explícita do construtor for fornecida, uma será injetada pelo compilador.
Às vezes precisamos validar um argumento que é passado para um construtor de superclasse. Podemos validar o argumento após o fato, mas isso significa potencialmente fazer um trabalho desnecessário. Este é um exemplo do problema que esta JEP quer resolver.
Fornece uma API para processar arquivos de classe que rastreie o formato de arquivo de classe definido pela especificação da Java Virtual Machine.
Permite que os componentes do JDK migrem para a API padrão e, eventualmente, remova a cópia interna do JDK da biblioteca ASM de terceiros.
Os modelos de string foram originalmente propostos como um recurso de visualização pelo JEP 430 no JDK 21. Propomos aqui uma segunda visualização para obter experiência e feedback adicionais. Exceto por uma alteração técnica nos tipos de expressões do modelo, não há alterações em relação à primeira visualização.
Este JEP propõe reincubar a API no JDK 22, com pequenas melhorias na API em relação ao JDK 21. A implementação inclui correções de bugs e melhorias de desempenho. Incluímos as seguintes alterações notáveis:
Suporta acesso vetorial com MemorySegments da heap que são apoiados por uma matriz de qualquer tipo de elemento primitivo. Anteriormente, o acesso era limitado MemorySegments da heap apoiado por uma matriz de bytes.
Aprimora a API Stream para oferecer suporte a operações intermediárias personalizadas. Isso permitirá que pipelines de fluxo transformem dados de maneiras que não são facilmente alcançáveis com as operações intermediárias atuais. Esta é uma API de visualização.
Simplifica 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.
Evoluir 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 da linguagem, 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. Este é um recurso de visualização do idioma.
Introduz valores com escopo definido, que permitem o compartilhamento gerenciado de dados imutáveis tanto com quadros filhos na mesma thread quanto com threads filhas. Os valores com escopo definido são mais fáceis de raciocinar do que variáveis locais de thread e têm menores custos de espaço e tempo, especialmente quando usados em combinação com Virtual Threads e Structured Concurrency. Esta é uma API de visualização.
Um Scoped Values é um contêiner de objeto que permite que um valor de dados seja compartilhado de forma segura e eficiente por um método com seus chamados diretos e indiretos dentro da mesma thread e com threads filhas, sem recorrer a parâmetros de método. É uma variável do tipo ScopedValue. Normalmente, ele é declarado como um campo estático final e sua acessibilidade é definida como privada para que não possa ser acessado diretamente pelo código em outras classes.
Referências
https://openjdk.org/projects/jdk/22/
Comentários
Postar um comentário