Pular para o conteúdo principal

Java 22


Java 22 vem aí!


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

Postagens mais visitadas deste blog

Java Records

  Java Records Imutável, Simples e limpa Esta funcionalidade da linguagem apareceu pela primeira vez na versão 14 como experimental e assim continuou até a versão 15 . Agora liberada de forma definitiva no Java 16 . O objetivo é ser possível ter classes que atuam como portadores transparentes de dados imutáveis. Os registros podem ser considerados tuplas nominais. Ou seja, após criado, um record não pode mais ser alterado. Records oferece uma uma sintaxe compacta para declarar classes que são portadores transparentes para dados imutáveis superficiais visando reduzir significamente o detalhamento dessas classes e irá melhorar a capacidade de leitura e manutenção do código. Vamos seguir um exemplo de uma classe chamada Pessoa . O primeiro exemplo vamos utilizar o modo tradicional. public class Pessoa { private String nome; private int idade; public Pessoa (String nome, int idade) { super (); this .nome = nome; this .idade = idade; } public String getNo

Java 8 ao 18: Mudanças mais importantes na plataforma Java

    Vamos rever muitas das mudanças mais importantes na plataforma Java que aconteceram entre a versão 8 (2014) e 18 (2022)   O Java 8 foi lançado em março de 2014 e o Java 18 em março de 2022. São 8 anos de progresso, 203 JEPs (JDK Enhancement Proposals ), entre essas duas versões. Neste post, revisaremos as mudanças mais importantes e discutiremos os benefícios e desafios da adoção de versões mais recentes do JDK para novos aplicativos e para os mais antigos compilados com versões mais antigas. Desde a versão 9, o Java tem novos recursos a cada 6 meses e é muito difícil acompanhar essas novas mudanças. A maioria das informações na internet descreve as mudanças entre as duas últimas versões do Java. No entanto, se você estiver em uma situação semelhante à minha, não está usando uma das versões mais recentes do Java, mas uma das várias versões anteriores (Geralmente 8 ou 11 que são as versões de suporte estendido). Então é útil saber quais novos recursos foram adicionados d

O suporte de longo prazo e o que o LTS significa para o ecossistema Java

A arte do suporte de longo prazo e o que o LTS significa para o ecossistema Java Aqui está o que o Java 17 tem em comum com o Java 11 e o Java 8. Em junho de 2018, há pouco mais de três anos, a Oracle e outros participantes do ecossistema Java anunciaram uma mudança no modelo de cadência de lançamento para Java SE. Em vez de ter um lançamento principal planejado a cada dois ou quatro anos (que geralmente se torna de três a quatro anos), um novo modelo de lançamento de recursos de seis meses seria usado: a cada três anos, um lançamento seria designado como Long-Term Support (LTS) e receba apenas atualizações trimestrais de segurança, estabilidade e desempenho. Esse padrão foi emprestado descaradamente do modelo de lançamento do Mozilla Firefox, mas o ajustou para ficar mais alinhado com os requisitos de uma plataforma de desenvolvimento. A primeira versão do Java lançada sob esse modelo foi o Java SE 11. O lançamento do Java SE 17, o segundo lançamento do LTS sob o novo