Lançamento do Java SE 23 e OpenJDK 23

Após seis meses de desenvolvimento, a Oracle publicou a plataforma Java SE 23 (Java Platform, Standard Edition 23), cuja implementação de referência utiliza o projeto aberto OpenJDK. Exceto pela remoção de algumas funcionalidades obsoletas, o Java SE 23 mantém a compatibilidade retroativa com versões anteriores da plataforma Java — a maioria dos projetos Java anteriormente escritos funcionará sem modificações ao serem executados na nova versão. Compilações prontas para instalação do Java SE 22 (JDK, JRE e Server JRE) estão disponíveis para Linux (x86_64, AArch64), Windows (x86_64) e macOS (x86_64, AArch64). A implementação de referência do Java 23, desenvolvida no âmbito do projeto OpenJDK, é completamente aberta sob a licença GPLv2, com exceções do GNU ClassPath, que permitem a vinculação dinâmica a produtos comerciais.

O Java SE 23 é classificado como uma versão com ciclo de apoio padrão, com atualizações sendo lançadas até o próximo lançamento. Para um suporte de longo prazo (LTS), recomenda-se o uso do Java SE 21 ou Java SE 17, cujas atualizações serão lançadas até 2031 e 2029, respectivamente (disponíveis publicamente até 2028 e 2026). O suporte estendido da versão LTS do Java SE 8 se estenderá até 2030, enquanto o Java SE 11 vai até 2032.

Entre as novidades apresentadas no Java SE 23:

  • O modo gerador do coletor de lixo ZGC (Generational Z Garbage Collector) agora está ativado por padrão, utilizando um tratamento separado para objetos "velhos" e "novos", o que melhora a eficiência da limpeza de objetos recentemente criados com tempo de vida curto. A utilização do Generational ZGC reduz os riscos de pausas durante a alocação de recursos, diminui a carga da CPU e o consumo de memória durante a coleta de lixo. Testes do Generational ZGC com Apache Cassandra 4 mostraram um aumento de quatro vezes na taxa de transferência com um tamanho fixo de heap e uma redução do tamanho do heap em um quarto, mantendo a mesma taxa de transferência.
  • O JavaDoc agora suporta o uso de marcação Markdown para documentar código em comentários, podendo ser usado em vez da mistura de HTML e tags @ do JavaDoc.
    Lançamento do Java SE 23 e OpenJDK 23
  • Os mecanismos de correspondência foram ampliados com suporte preliminar para o uso de tipos primitivos (int, byte, char e outros tipos básicos que não são objetos) em todos os tipos de modelos, na operação "instanceof" e em blocos "switch". switch (x.getStatus()) { case 0 -> "okay"; case 1 -> "warning"; case 2 -> "error"; case int i -> "unknown status: " + i; } if (i instanceof byte b) { … b … }
  • Foi adicionado suporte preliminar para o uso de uma única expressão "import module M" para importar todos os pacotes exportados pelo módulo indicado. Essa alteração simplifica consideravelmente a reutilização de bibliotecas modulares, permitindo a conexão de bibliotecas e classes sem precisar definir sua posição na hierarquia de pacotes. Por exemplo, a indicação "import module java.base" resultará na importação de todos os 54 pacotes que fazem parte do módulo java.base, que anteriormente precisariam ser mencionados separadamente ("import java.io.*", "import java.util.*", etc.).

    Foi proposta uma segunda implementação preliminar da API Class-File para análise, geração e transformação de arquivos de classe Java. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue().startsWith("debug"))) { classBuilder.with(ce); } } });

  • Foi proposta uma oitava implementação preliminar da API Vector, que fornece funções para cálculos vetoriais, executados com o uso de instruções vetoriais dos processadores x86_64 e AArch64, permitindo aplicar operações simultaneamente a vários valores (SIMD). Ao contrário dos recursos de vetorização automática de operações escalares oferecidos pelo compilador JIT HotSpot, a nova API permite um controle explícito da vetorização para processamento paralelo de dados.
  • Na classe java.io.Console, foram adicionados os métodos format, printf, readPassword e readLine para formatação, saída e leitura de texto com base na localidade selecionada. System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", new Date()) 2024-mai-16 jeudi
  • Foi adicionada a segunda prévia da implementação do API Stream avançado, que suporta a definição de operações intermediárias personalizadas que podem ser úteis em casos onde as operações intermediárias integradas existentes não são suficientes para a transformação de dados desejada. Os manipuladores personalizados são conectados através da nova operação intermediária Stream::gather(Gatherer), que processa os elementos do fluxo aplicando a eles o manipulador definido pelo usuário. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • Foi adicionada a terceira prévia da implementação de classes implicitamente declaradas e instâncias anônimas do método 'main', onde é possível dispensar declarações public/static, passagem de arrays de argumentos e outras entidades relacionadas à declaração da classe. // antes public class HelloWorld { public static void main(String[] args) { System.out.println('Hello world!'); } } // agora pode-se void main() { System.out.println('Hello, World!'); }
  • Foi adicionada a segunda prévia de uma nova funcionalidade que permite a especificação em construtores de expressões antes da chamada super(...), utilizada para a chamada explícita do construtor da classe pai a partir do construtor da classe herdada, se essas expressões não referirem-se à instância crianda pelo construtor. class Outer { void hello() { System.out.println('Hello'); } class Inner { Inner() { hello(); super(); } } }
  • Foi adicionada a terceira prévia da implementação de valores limitados (Scoped Values), que permitem compartilhar dados imutáveis entre fluxos e trocar dados de forma eficiente entre fluxos filhos (os valores são herdados). Os Scoped Values estão se desenvolvendo para substituir o mecanismo de variáveis locais ao fluxo (thread-local variables) e são mais eficientes ao usar um número muito grande de fluxos virtuais (milhares e milhões de fluxos). A principal diferença entre Scoped Values e variáveis locais ao fluxo é que os primeiros são escritos uma única vez, não podem ser alterados posteriormente e permanecem disponíveis apenas enquanto o fluxo está em execução.
  • Foi proposto para teste a terceira versão preliminar da API para concorrência estruturada (Structured Concurrency), que simplifica o desenvolvimento de aplicações multithread, tratando várias tarefas executadas em diferentes threads como um único bloco.
  • Os métodos de acesso à memória externa (fora da JVM) fornecidos pela classe sun.misc.Unsafe foram declarados obsoletos e estão programados para serem removidos. Para acessar memória fora da heap e interagir com código externo, recomenda-se usar as APIs VarHandle e FFM (Foreign Function & Memory).

Adicionalmente, destaca-se a publicação da atualização da plataforma para a criação de aplicações com interface gráfica JavaFX 23 e a inclusão do compilador JIT GraalVM no Oracle JDK 23.

Também foi lançado uma nova versão da máquina virtual universal GraalVM, que suporta a execução de aplicações em JavaScript (Node.js), Python, Ruby, R, e quaisquer linguagens para JVM (Java, Scala, Clojure, Kotlin) e linguagens para as quais pode ser gerado código LLVM (C, C++, Rust). Além do suporte ao JDK 23, a nova versão otimiza o consumo de memória e o tamanho do código executável, implementando suporte abrangente para a incorporação de Python e WebAssembly no código Java usando compilação JIT.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster