Após seis meses de desenvolvimento, a Oracle lançou o Java SE 27 (Java Platform, Standard Edition 27), que utiliza o projeto de código aberto OpenJDK como implementação de referência. Com exceção da remoção de alguns recursos obsoletos, o Java SE 27 mantém a compatibilidade com versões anteriores da plataforma Java — a maioria dos projetos Java escritos anteriormente funcionará sem alterações na nova versão. Versões prontas para instalação do Java SE 27 (JDK, JRE e Server JRE) estão disponíveis para instalação. Linux (x86_64, AArch64), Windows (x86_64) e macOS (x86_64, AArch64). Desenvolvida pelo projeto OpenJDK, a implementação de referência do Java SE 27 é totalmente de código aberto sob a licença GPLv2 com a exceção GNU ClassPath, que permite a vinculação dinâmica com produtos comerciais.
O Java SE 27 é categorizado como uma versão com suporte regular, com atualizações sendo lançadas até a próxima versão. A versão com suporte de longo prazo (LTS) deve ser o Java SE 25, Java SE 21 ou Java SE 17, com atualizações sendo lançadas até 2033, 2031 e 2029, respectivamente (geralmente disponíveis até setembro de 2030, 2028 e 2026). O suporte estendido para a versão LTS do Java SE 8 continuará até 2030 e, para o Java SE 11, até 2032.
As alterações no Java SE 27 (1, 2, 3, 4) incluem:
- Por padrão, todos os ambientes utilizam o coletor de lixo G1 (Garbage-First), anteriormente usado em sistemas de servidores. O G1 é otimizado para uso em sistemas multiprocessadores com grande capacidade de memória e para equilibrar latência previsível com alta taxa de transferência. Durante a operação, o G1 divide a memória em várias regiões pequenas e prioriza aquelas com mais objetos não utilizados e menos dados acessados ativamente.
- A JVM HotSpot utiliza cabeçalhos de objetos compactos por padrão. Em sistemas de 64 bits, o tamanho do cabeçalho foi reduzido de 96 para 64 bits, diminuindo o consumo de memória e aumentando a probabilidade de os dados atingirem o cache do processador. Nos benchmarks SPECjbb2015, o consumo de memória diminuiu 22%, a carga da CPU diminuiu 8% e o número de operações de coleta de lixo diminuiu 15%. Os tempos de execução dos testes para o analisador JSON foram reduzidos em 10%.
- A implementação do TLS 1.3 adiciona suporte para esquemas híbridos de acordo de chaves que combinam o algoritmo ML-KEM (CRYSTALS-Kyber) resistente a computação quântica com algoritmos clássicos de curva elíptica ECDHE: X25519MLKEM768 (ECDHE com a curva X25519 + ML-KEM-768), SecP256r1MLKEM76 (ECDHE com a curva secp256r1 + ML-KEM-768) e SecP384r1MLKEM1024 (ECDHE com a curva secp384r1 + ML-KEM-1024). Na API javax.net.ssl Esses esquemas estão ativados por padrão e não exigem nenhuma alteração no aplicativo para serem usados.
- O JDK Flight Recorder (JFR), uma ferramenta usada para monitoramento de desempenho, criação de perfis e diagnósticos, agora oferece suporte à higienização de argumentos de linha de comando, valores iniciais de variáveis de ambiente e propriedades do sistema nas informações de diagnóstico salvas. Essa alteração impede o vazamento de dados sensíveis processados pelo processo analisado, como tokens de autorização e chaves de acesso à API transmitidas por meio de variáveis de ambiente.
- A terceira prévia da API Lazy Constants foi implementada para trabalhar com objetos que contêm dados imutáveis e são tratados como constantes na JVM. Otimizações de desempenho semelhantes às aplicadas a campos com a palavra-chave "final" são aplicadas a esses objetos. Ao contrário de "final", a nova API separa a criação de valores constantes de sua inicialização, garante que um valor possa ser inicializado apenas uma vez, reduz o tempo de inicialização do programa e permite que as otimizações de "constant folding", anteriormente usadas apenas em código interno do JDK, sejam usadas no código do usuário. class Application { // Anteriormente: // static final UserService USERS = new UserService(); // Agora: static final StableValue USUÁRIOS = StableValue.of(); public static UserService users() { return USUÁRIOS.orElseSet(UserService::new); } }
- O mecanismo de correspondência de padrões introduz uma quinta versão da capacidade de usar tipos primitivos (int, byte, char e outros tipos básicos não-objeto) em todos os tipos de padrões, 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 … }
- A sétima versão preliminar da API de Concorrência Estruturada, que simplifica o desenvolvimento de aplicações multithread ao tratar múltiplas tarefas executadas em threads diferentes como uma única unidade, foi lançada para testes.
- A décima segunda implementação de teste da API Vector foi concluída. Esta API fornece funções para cálculos vetoriais realizados usando instruções vetoriais dos processadores x86_64 e AArch64 e permite operações simultâneas em múltiplos valores (SIMD). Ao contrário da vetorização automática de operações escalares do compilador JIT HotSpot, a nova API permite o controle explícito da vetorização para processamento paralelo de dados.
- Uma terceira versão da API já está disponível para codificação e decodificação de objetos contendo chaves criptográficas, certificados e listas de revogação de certificados usando o formato PEM (Pivacy-Enhanced Mail).
Além disso, temos o prazer de anunciar o lançamento de uma atualização para a plataforma JavaFX 27 para a criação de aplicativos com interface gráfica de usuário. O lançamento da máquina virtual universal GraalVM 27, que suporta a execução de aplicativos em JavaScript (Node.js), Python, Ruby, R, qualquer linguagem JVM (Java, Scala, Clojure, Kotlin) e linguagens para as quais o bitcode LLVM pode ser gerado (C, C++, Rust), também é esperado nas próximas horas.
Fonte: opennet.ru
