Lançamento do Java SE 20

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

O Java SE 20 é classificado como uma versão com suporte normal, com atualizações que serão lançadas até o próximo lançamento. Para suporte de longo prazo (LTS), deve-se utilizar o Java SE 17, cujas atualizações serão disponibilizadas até 2029. Vale lembrar que, a partir do lançamento do Java 10, o projeto adotou um novo processo de desenvolvimento, que implica em um ciclo mais curto para a formação de novos lançamentos. A nova funcionalidade agora é desenvolvida em uma ramificação master que é constantemente atualizada, incluindo mudanças já prontas, da qual são ramificadas versões de estabilização a cada seis meses.

As inovações do Java 20 incluem:

  • O suporte preliminar a Scoped Values foi proposto, permitindo o compartilhamento de dados imutáveis em fluxos e a troca eficiente de informações entre fluxos filhos (os valores são herdados). Scoped Values estão se desenvolvendo para substituir o mecanismo de variáveis locais de thread (thread-local variables) e são mais eficientes quando usados com 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 de thread é que os primeiros são gravados uma vez, não podem ser alterados posteriormente e permanecem acessíveis apenas durante a execução do fluxo. class Server { final static ScopedValue CURRENT_USER = new ScopedValue(); void serve(Request request, Response response) { var level = (request.isAuthorized() ? ADMIN : GUEST); var user = new User(level); ScopedValue.where(CURRENT_USER, user) .run(() -> Application.handle(request, response)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) throw new InvalidUserException(); return new DBConnection(…); } }
  • Foi adicionada a segunda implementação preliminar de padrões de registro (record pattern), expandindo a capacidade de correspondência introduzida no Java 16 para análise de valores em classes do tipo record. Por exemplo: record Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = p.x(); int y = p.y(); System.out.println(x + y); } }
  • Foi adicionada a quarta implementação preliminar de correspondência por padrão em expressões 'switch', permitindo o uso de padrões flexíveis nas etiquetas 'case' em vez de valores exatos, abrangendo uma série de valores para os quais anteriormente eram necessárias longas cadeias de expressões 'if…else'. static String formatterPatternSwitch(Object obj) { return switch (obj) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); }; }
  • Foi adicionada a segunda implementação preliminar da API FFM (Foreign Function & Memory), permitindo a interação de programas Java com código e dados externos através da chamada de funções de bibliotecas externas e acesso à memória fora da JVM.
  • Adicionada a segunda implementação preliminar de fluxos virtuais, que são fluxos leves que simplificam significativamente a escrita e a manutenção de aplicativos multithread de alto desempenho.
  • Adicionada a segunda versão da API experimental para paralelismo estruturado, facilitando o desenvolvimento de aplicativos multithread ao tratar várias tarefas executadas em diferentes fluxos como um único bloco.
  • Adicionada a quinta implementação preliminar da API Vector, que fornece funcionalidades para cálculos vetoriais realizados usando instruções vetoriais de processadores x86_64 e AArch64 e permite aplicar operações simultaneamente a vários valores (SIMD). Ao contrário das capacidades de auto-vetorização de operações escalares fornecidas pelo compilador JIT HotSpot, a nova API permite o controle explícito da vetorização para processamento paralelo de dados.

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