Lançamento do Java SE 25 LTS e OpenJDK 25.

Após seis meses de desenvolvimento, a Oracle lançou a plataforma Java SE 25 (Java Platform, Standard Edition 24), cuja implementação de referência utiliza o projeto open source OpenJDK. Exceto pela remoção de algumas funcionalidades obsoletas, o Java SE 25 mantém a compatibilidade retroativa com lançamentos anteriores da plataforma Java — a maioria dos projetos Java escritos anteriormente funcionará normalmente com a nova versão. As compilações prontas para instalação do Java SE 25 (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 SE 25, desenvolvida no âmbito do projeto OpenJDK, é totalmente aberta sob a licença GPLv2 com exceções GNU ClassPath, que permitem o link dinâmico com produtos comerciais.

O Java SE 25 é classificado como uma versão com suporte estendido, com atualizações previstas até 2033 (atualizações públicas até setembro de 2030). As versões de Longo Prazo (LTS) também incluem o Java SE 17 e 21, com atualizações até 2029 e 2031, respectivamente (atualizações públicas até 2026 e 2028). O suporte estendido para as vertentes LTS do Java SE 8 e 11 se estenderá até 2030 e 2032.

Entre as novidades apresentadas no Java SE 25 (1, 2, 3, 4):

  • Adicionado um API experimental StableValue para trabalhar com objetos que contêm dados imutáveis e são processados na JVM como constantes. Esse tipo de objeto se beneficia de otimizações de desempenho semelhantes às de campos com a palavra-chave "final". A API StableValue separa a criação de valores permanentes de sua inicialização, garantindo que o valor seja inicializado apenas uma vez, reduzindo o tempo de inicialização dos programas e permitindo a aplicação em código de usuário de otimizações de simplificação de constantes (constant-folding), anteriormente utilizadas apenas no código interno do JDK. class Application { // Antes: // static final UserService USERS = new UserService(); // Depois: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
  • Adicionado um API experimental para codificar e decodificar objetos com chaves criptográficas, certificados e listas de revogação de certificados, utilizando o formato PEM (Pivacy-Enhanced Mail).
  • Adicionada a suporte a valores limitados (Scoped Values), que permitem compartilhar dados imutáveis em threads e trocar dados de forma eficaz entre threads filhas (os valores são herdados). Os Scoped Values estão sendo desenvolvidos para substituir o mecanismo de variáveis locais de thread (variáveis específicas de thread) e são mais eficazes ao usar um número muito grande de threads virtuais (milhares e milhões de threads). A principal diferença entre Scoped Values e variáveis locais de thread é que os primeiros são gravados uma vez, não podem ser alterados posteriormente e permanecem disponíveis apenas durante a execução da thread.
  • Adicionada uma API para usar funções criptográficas de derivação de chave (KDF, key derivation function), permitindo gerar chaves adicionais de comprimento necessário com base em uma chave secreta (por exemplo, uma senha) e um conjunto de dados arbitrário.
  • Removido o código e scripts de construção para suporte a sistemas x86 de 32 bits. A interrupção do suporte a sistemas x86 de 32 bits simplificou a infraestrutura para construção e teste do JDK, além de permitir a implementação de funcionalidades vinculadas a plataformas, sem a necessidade de criar manipuladores de fallback para sistemas x86 de 32 bits.
  • Adicionada a capacidade de usar uma única expressão "import module M" para importar todos os pacotes exportados pelo módulo especificado. Essa alteração simplifica significativamente a reutilização de bibliotecas modulares, permitindo incluir bibliotecas e classes sem a necessidade de definir suas localizações na hierarquia de pacotes. Por exemplo, ao especificar "import module java.base", todos os 54 pacotes que fazem parte do módulo java.base serão importados, que anteriormente teriam que ser mencionados separadamente ("import java.io.*", "import java.util.*", etc.).
  • Proposto uma versão compacta de formatação de programas, que pode ser útil para ensino e ao desenvolver pequenos aplicativos. Na forma compacta, não é necessária a definição de classes adicionais, os APIs típicos são importados automaticamente e métodos simplificados de entrada/saída estão disponíveis. Por exemplo, o aplicativo "Hello, World!" pode ser reduzido a: void main() { IO.println("Hello, World!"); }
  • É permitido especificar construtores de expressões antes da chamada de super(...), usada para invocar explicitamente o construtor da classe pai a partir do construtor da classe herdada, desde que essas expressões não se refiram à instância criada pelo construtor. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); super(); } } }
  • Foi adicionado o modo gerador de coleta de lixo Shenandoah, no qual objetos antigos e recém-criados são processados separadamente para aumentar a eficiência da limpeza de objetos de vida curta. O novo modo proporciona uma largura de banda mais previsível, resistência a mudanças na carga e redução do consumo de memória durante a coleta de lixo. O programador Shenandoah visa reduzir o tempo de parada durante a coleta de lixo, realizando uma maior quantidade de trabalho em paralelo com a execução de aplicativos Java.
  • Foi simplificada a criação de um cache para carregamento e linkagem antecipados (Ahead-of-Time), que acelera a inicialização do HotSpot JVM, utilizando classes já carregadas e linkadas. Ao iniciar, não são mais necessárias operações separadas para registrar a atividade e criar o cache, bastando um único comando: java -XX:AOTCacheOutput=app.aot -cp app.jar com.example.App …
  • Na inicialização da HotSpot Java VM, foi implementada a capacidade de usar perfis de execução de métodos coletados durante uma execução anterior do aplicativo. Essa alteração permite que o compilador JIT dispensa a coleta de estatísticas e comece a gerar código nativo imediatamente, sem esperar pela formação do perfil.
  • Na HotSpot JVM, foi implementado suporte para cabeçalhos de objetos compactos, cujo tamanho em sistemas de 64 bits foi reduzido de 96 para 64 bits (de 12 para 8 bytes). A redução do tamanho dos cabeçalhos permite diminuir o tamanho do heap e aumentar a eficiência do cache.
  • Uma implementação de teste da API Vector foi proposta, fornecendo funções para cálculos vetoriais que utilizam instruções vetoriais dos processadores x86_64 e AArch64, permitindo aplicar operações a vários valores simultaneamente (SIMD). Ao contrário das capacidades de vetorização automática de operações escalares fornecidas pelo compilador JIT HotSpot, a nova API permite um controle explícito sobre a vetorização para o processamento paralelo de dados.
  • Foi proposta para teste a quinta versão preliminar da API para concorrência estruturada (Structured Concurrency), que simplifica o desenvolvimento de aplicações multithread ao tratar várias tarefas executadas em diferentes threads como um único bloco.
  • Na mecânica de correspondência de padrões, foi proposta a terceira versão preliminar da possibilidade de utilizar tipos primitivos (int, byte, char e outros tipos básicos que não são objetos) em todos os tipos de templates, no operador "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 adicionada no JDK Flight Recorder (JFR) suporte experimental para profiling com um rastreamento mais preciso do consumo de recursos da CPU na plataforma Linux. Informações sobre o tempo de execução de várias construções podem ser visualizadas de forma clara utilizando gráficos coloridos "FlameGraph".
  • A estabilidade do JDK Flight Recorder (JFR) foi aumentada durante a amostragem assíncrona das pilhas de threads Java, contornando a pilha de chamadas apenas em "pontos seguros" (safepoints).
  • Foram adicionadas ao JDK Flight Recorder (JFR) ferramentas para rastreamento e avaliação do tempo de execução de métodos. Suporte para rastreamento da pilha de chamadas de métodos específicos e registro de estatísticas precisas sobre as chamadas de métodos, abrangendo métricas como tempo de execução e número de chamadas.

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