Versão Java SE 18

Após seis meses de desenvolvimento, a Oracle lançou o Java SE 18 (Java Platform, Standard Edition 18), 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 18 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 18 (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 18 é totalmente open source sob a licença GPLv2, com exceções GNU ClassPath permitindo vinculação dinâmica com produtos comerciais.

Java SE 18 é 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 18 incluem:

  • A codificação padrão é UTF-8. APIs Java que processam dados de texto com base na codificação de caracteres agora usarão UTF-8 por padrão em todas as plataformas, independentemente das configurações do sistema e de localidade. Para reverter ao comportamento antigo, onde a codificação é escolhida com base na localidade do sistema, você pode usar a opção "-Dfile.encoding=COMPAT".
  • O pacote inclui o pacote com.sun.net.httpserver, que inclui o utilitário jwebserver e a API da biblioteca com a implementação de um servidor http simples para servir conteúdo estático (CGI e manipuladores semelhantes a servlet não são suportados). O servidor HTTP integrado não é otimizado para cargas de trabalho e não suporta controle de acesso e autenticação, pois é destinado principalmente ao uso no processo de desenvolvimento para prototipagem, depuração e teste de projetos.
  • JavaDoc fornece suporte para a tag "@snippet" para incorporar exemplos de trabalho e trechos de código na documentação da API, onde você pode usar ferramentas de validação, realce de sintaxe e integração IDE.
  • A implementação da API java.lang.reflect (Core Reflection), projetada para obter informações sobre métodos, campos e construtores de classes, bem como acesso à estrutura interna das classes, foi redesenhada. A própria API java.lang.reflect permanece inalterada, mas agora é implementada usando identificadores de método fornecidos pelo módulo java.lang.invoke, em vez de usar geradores de bytecode. A mudança nos permitiu unificar as implementações de java.lang.reflect e java.lang.invoke e simplificar sua manutenção.
  • Uma terceira visualização da API Vector foi proposta, 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.
  • Adicionada interface SPI (interface do provedor de serviços) para resolver nomes de host e endereços IP, permitindo usar resolvedores alternativos em java.net.InetAddress que não estão vinculados a manipuladores oferecidos pelo sistema operacional.
  • Uma segunda visualização da API Foreign Function & Memory é fornecida, permitindo que os aplicativos interajam com código e dados fora do tempo de execução Java. A nova API permite chamar com eficiência funções não JVM e acessar memória não gerenciada por JVM. Por exemplo, você pode chamar funções de bibliotecas compartilhadas externas e acessar dados de processo sem usar JNI.
  • Foi adicionada uma segunda implementação experimental de correspondência de padrões em expressões “switch”, permitindo o uso de padrões flexíveis em rótulos “case” ao invés de valores exatos, cobrindo uma série de valores de uma só vez, para os quais anteriormente era necessário usar cadeias complicadas de expressões “if...else”. Objeto o = 123L; String formatada = switch (o) { 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(); };
  • O mecanismo de finalização e seus métodos associados, como Object.finalize(), Enum.finalize(), Runtime.runFinalization() e System.runFinalization() foram descontinuados e serão desabilitados em uma versão futura.
  • Os coletores de lixo ZGC (Z Garbage Collector), SerialGC e ParallelGC suportam desduplicação de linha.

Fonte: opennet.ru

Adicionar um comentário