HeadlinesBriefing favicon HeadlinesBriefing.com

JDK 28: Otimizações de Classes de Valor (JEP 401)

Hacker News •
×

Esta postagem discute recursos de visualização no JDK 28, especificamente JEP 401, um marco importante do Valhalla integrado como recurso de visualização. Classes de valor aumentam a capacidade de comunicar a semântica do programa e oportunidades de otimização disponíveis para a JVM. No entanto, a crença de que classes comuns fornecem um piso de desempenho e classes de valor não podem ir abaixo dele é infundada.

Um programa bem-intencionado pode forçar a JVM a converter entre representações achatadas e de referência quando os métodos interagem, o que pode anular os benefícios. A principal vantagem de otimização de classes de valor é abrir mão da identidade, permitindo que o tempo de execução escolha representações adequadas, achatar valores para evitar perseguição de ponteiros e escalarizar componentes em registradores ou na pilha. A análise de escape torna-se trivial sem o requisito de identidade.

A imutabilidade permite o achatamento; JEP 539, Inicialização Estrita de Campos, permite que a JVM confie em um campo final inicializado antes que seu objeto envolvente se torne observável. Como tal campo não pode ser atualizado posteriormente, a JVM pode usar um layout achatado não atômico sem risco de atribuição fragmentada. Campos mutáveis devem preservar atribuição livre de fragmentação.

Se um campo mutável contiver um valor muito grande para uma atualização achatada atômica, a JVM deve usar um layout de referência. Considere um registro Four Longs com 32 bytes de carga útil; muito grande para uma atualização achatada atômica. Mas em um registro Envelope, a carga útil é um campo final estritamente inicializado, permitindo um layout achatado não atômico.

Se Envelope fosse mutável, o layout reverte para REGULAR para manter a consistência.