Versão Java SE 20

Após seis meses de desenvolvimento, a Oracle lançou o Java SE 20 (Java Platform, Standard Edition 20), que usa o projeto OpenJDK de código aberto como implementação de referência. Com exceção da remoção de alguns recursos obsoletos, o Java SE 20 mantém compatibilidade retroativa com versões anteriores da plataforma Java - a maioria dos projetos Java escritos anteriormente funcionarão sem alterações quando executados na nova versão. Compilações prontas para instalação do Java SE 20 (JDK, JRE e Server JRE) são preparadas para Linux (x86_64, AArch64), Windows (x86_64) e macOS (x86_64, AArch64). Desenvolvida pelo projeto OpenJDK, a implementação de referência Java 20 é totalmente open source sob a licença GPLv2, com exceções GNU ClassPath permitindo vinculação dinâmica com produtos comerciais.

Java SE 20 é classificado como uma versão de suporte regular e continuará recebendo atualizações até a próxima versão. O branch Long Term Support (LTS) deverá ser o Java SE 17, que continuará recebendo atualizações até 2029. Lembramos que a partir do lançamento do Java 10, o projeto passou para um novo processo de desenvolvimento, implicando em um ciclo mais curto para a formação de novos lançamentos. A nova funcionalidade agora é desenvolvida em um branch master constantemente atualizado, que inclui alterações prontas e a partir do qual os branchs são ramificados a cada seis meses para estabilizar novos lançamentos.

Os novos recursos do Java 20 incluem:

  • Há suporte preliminar para valores com escopo, permitindo que dados imutáveis ​​sejam compartilhados entre threads e dados trocados de forma eficiente entre threads filhos (os valores são herdados). Os valores com escopo estão sendo desenvolvidos para substituir o mecanismo de variáveis ​​​​locais de thread e são mais eficientes ao usar um número muito grande de threads virtuais (milhares ou milhões de threads). A principal diferença entre valores com escopo e variáveis ​​locais de thread é que os primeiros são gravados uma vez, não podem ser alterados no futuro e permanecem disponíveis apenas durante a execução do thread. class Server { final static ScopedValue CURRENT_USER = new ScopedValue(); void serve (solicitação, resposta de resposta) { var level = (request. isAuthorized()? ADMIN: GUEST); var usuário = novo usuário(nível); ScopedValue.where(CURRENT_USER, user).run(() -> Application.handle(solicitação, resposta)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) lançar new InvalidUserException(); retornar nova DBConnection(...); } }
  • Uma segunda visualização de padrões de registro foi adicionada, estendendo o recurso de correspondência de padrões introduzido no Java 16 para analisar os valores das classes de registro. Por exemplo: record Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = px(); int y = py(); System.out.println(x+y); } }
  • Foi adicionada uma quarta implementação preliminar de correspondência de padrões em instruções “switch”, permitindo que rótulos “case” usem não valores exatos, mas padrões flexíveis que cobrem uma série de valores de uma só vez, para os quais anteriormente era necessário usar complicados 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 Duplo d -> String.format("duplo %f", d); case String s -> String.format("String %s", s); padrão -> o.toString(); }; }
  • Foi adicionada uma segunda implementação preliminar da API FFM (Foreign Function & Memory), que permite organizar a interação de programas Java com código e dados externos por meio de chamadas de funções de bibliotecas externas e acesso à memória fora da JVM.
  • Foi adicionada uma segunda visualização de threads virtuais, que são threads leves que simplificam bastante a gravação e a manutenção de aplicativos multithread de alto desempenho.
  • Adicionada uma segunda API experimental para paralelismo estruturado, que simplifica o desenvolvimento de aplicativos multithread, tratando várias tarefas executadas em threads diferentes como um único bloco.
  • Uma quinta visualização da API Vector foi adicionada, fornecendo funções para cálculos vetoriais que são executados usando instruções vetoriais em processadores x86_64 e AArch64 e permitem que operações sejam aplicadas simultaneamente a vários valores (SIMD). Ao contrário dos recursos fornecidos no compilador HotSpot JIT para autovetorização de operações escalares, a nova API torna possível controlar explicitamente a vetorização para processamento paralelo de dados.

Fonte: opennet.ru

Adicionar um comentário