Tecnologia

Java 27 remove o GC que travava apps e reduz memória de objetos em 33%

Adrian Kessler
Adicione-nos no Google

O Java 27 chega com duas mudanças que vão alcançar silenciosamente toda JVM rodando em qualquer lugar. O coletor de lixo G1 agora é o padrão em todo runtime Java — encerrando a resistência do coletor Serial, que parava o mundo, em hardware limitado — e os cabeçalhos de objetos foram reduzidos de 96 bits para 64 bits, cortando a sobrecarga em um terço para qualquer aplicação que crie números significativos de objetos.

O coletor Serial era o GC mais antigo do Java: simples, previsível e brutal. Quando executava, congelava a aplicação inteira até que a heap fosse limpa. Em servidores com muita memória e múltiplas CPUs, essa troca se tornou insustentável há anos — o G1 substituiu o Serial como padrão para servidores a partir do Java 9. Ambientes limitados continuaram rodando o Serial até o Java 26: máquinas com uma única CPU, pequenas VMs na nuvem, sistemas embarcados com pouca memória. Esse padrão termina com o Java 27.

O G1 divide a heap em pequenas regiões e as coleta incrementalmente, priorizando as seções com mais lixo primeiro — daí o nome Garbage-First. As pausas ainda existem, mas são mais curtas e mais previsíveis do que uma coleta completa do Serial. A Oracle afirma que o G1 agora é competitivo com o Serial em todos os tamanhos de heap. Para desenvolvedores que implantam aplicações nas instâncias de nuvem mais baratas disponíveis — uma CPU, um gigabyte de RAM — o Java 27 remove um atrito com o qual eles conviviam há anos.

A mudança nos cabeçalhos compactos de objetos é a outra metade desta versão. Objetos Java carregam metadados — informações de tipo, códigos hash, estado de bloqueio — armazenados em um cabeçalho anexado a cada objeto. O formato antigo usava 96 bits. O Java 27 comprime isso para 64 bits, uma redução de 33% por objeto. Para aplicações que criam milhões de objetos — filas de mensagens, livros-razão financeiros, microsserviços orientados a eventos — o efeito cumulativo é mensurável: heap mais denso, melhor utilização do cache da CPU, menos ciclos de coleta necessários.

Ambas as mudanças trazem ressalvas. Aplicações ajustadas explicitamente para o comportamento do GC Serial podem ver diferenças inesperadas de temporização após a atualização. O G1 usa mais memória para contabilidade do que o Serial, o que importa em ambientes com orçamentos de memória realmente apertados — embora os testes da Oracle indiquem que a troca de throughput é insignificante para a maioria das cargas de trabalho. Equipes de desenvolvimento que implantam o Java 27 em sistemas limitados devem testar com os novos padrões antes de enviar para produção. A transição é automática, mas não é invisível.

O Java 27 também adiciona troca de chaves híbrida pós-quântica para TLS 1.3, implementando o algoritmo ML-KEM junto com a troca de curva elíptica X25519 já existente. Conexões TLS negociadas hoje poderiam, em teoria, ser capturadas e descriptografadas mais tarde por um computador quântico futuro. A troca de chaves híbrida se defende contra isso exigindo que um invasor quebre simultaneamente um algoritmo clássico e um pós-quântico — uma adição significativa para qualquer serviço Java que lide com dados sensíveis.

O Java 27 foi lançado em 15 de setembro de 2026, seguindo o cronograma de seis meses da plataforma. Concorrência estruturada e constantes preguiçosas continuam como recursos de pré-visualização nesta versão. O próximo lançamento de suporte de longo prazo na série Java é esperado para 2027.

Tags: , , , , ,

Adicione-nos no Google

Discussão

Há 0 comentários.