Lançamento do Java SE 14

Após seis meses de desenvolvimento, a Oracle lançou plataforma Java SE 14 (Java Platform, Standard Edition 14), cuja implementação de referência é o projeto de código aberto OpenJDK. O Java SE 14 mantém a compatibilidade retroativa com versões anteriores da plataforma Java; todos os projetos Java previamente escritos funcionarão sem modificações na nova versão. Versões prontas para instalação do Java SE 14 (JDK, JRE e Server JRE) foram preparados para Linux (x86_64), Windows e macOS. A implementação de referência desenvolvida no âmbito do projeto OpenJDK Java 14 é totalmente aberta sob a licença GPLv2 com exceções do GNU ClassPath, permitindo ligação dinâmica a produtos comerciais.

O Java SE 14 é classificado como uma versão com suporte regular, com atualizações sendo lançadas até o próximo lançamento. Para uma ramificação de suporte de longo prazo (LTS), deve-se usar o Java SE 11, cujas atualizações serão lançadas até 2026. A antiga ramificação LTS Java 8 será suportada até dezembro de 2020. O próximo lançamento LTS está programado para setembro de 2021. Lembre-se de que, a partir do lançamento do Java 10, o projeto passou a um novo processo de desenvolvimento, que implica um ciclo mais curto para a formação de novos lançamentos. Agora, novas funcionalidades são desenvolvidas em uma ramificação master continuamente atualizada, na qual alterações prontas são incluídas, a partir da qual ramificações para estabilização de novos lançamentos são criadas a cada seis meses.

De novidades Java 14 é possível marcar:

  • Suporte experimental adicionado. correspondências com o modelo na operação «instanceof», que permite determinar imediatamente uma variável local para acessar o valor verificado. Por exemplo, pode-se escrever imediatamente «if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}» sem definir explicitamente «String s = (String) obj».

    Era:

    if (obj instanceof Group) {
    Group group = (Group) obj;
    var entries = group.getEntries();
    }

    Agora é possível evitar a definição «Group group = (Group) obj»:

    if (obj instanceof Group group) {
    var entries = group.getEntries();
    }

  • Adicionada suporte experimental à nova palavra-chave «record», que fornece uma forma compacta para definir classes, permitindo evitar a definição explícita de vários métodos de baixo nível, como equals(), hashCode() e toString(), em casos onde os dados são armazenados apenas em campos, cujo comportamento não muda. Quando implementações de métodos como equals(), hashCode() e toString() são usadas na classe, pode-se evitar sua definição explícita:

    registro público BankTransaction(LocalDate data,
    double valor,
    String descrição) {}

    Esta declaração resultará na adição automática das implementações dos métodos equals(), hashCode() e toString() além do construtor e dos métodos que controlam a modificação de dados (getter).

  • Padronizada e incluída por padrão o suporte à nova forma de expressões 'switch', que não requer a declaração do operador 'break', permitindo agrupar rótulos repetidos e podendo ser usada não apenas como uma declaração, mas também como uma expressão.

    var log = switch (evento) {
    case PLAY -> "O usuário ativou o botão de reprodução";
    case STOP, PAUSE -> "O usuário precisa de uma pausa";
    default -> {
    String mensagem = evento.toString();
    LocalDateTime agora = LocalDateTime.now();
    yield "Evento desconhecido " + mensagem +
    " registrado em " + agora;
    }
    };

  • Ampliado o suporte experimental a blocos de texto — uma nova forma de literais de string, permitindo incluir no código fonte dados de texto de várias linhas sem aplicar a eles a escape de caracteres e preservando a formatação original do texto no bloco. O bloco é delimitado por três aspas duplas. No Java 14, os blocos de texto suportam a sequência de escape "\s" para definir um espaço e "\" para concatenar com a próxima linha (ignorando a quebra de linha, quando é necessário imprimir uma linha muito longa). Por exemplo, em vez do código

    String html = "" +
    "\n\t" + "" +
    "\n\t\t" + "

    \"Java 14 chegou!\"" +
    "\n\t" + "" +
    "\n" + "";

    pode-se indicar:

    String html = """
    <HTML>
    <BODY>

    "Java 14\
    chegou!"
    <\/BODY>
    """;

  • Aumentada a clareza da diagnosticação em casos de exceções NullPointerException. Se antes a mensagem de erro apenas se referia ao número da linha, agora detalha qual método causou a exceção. O diagnóstico ampliado é ativado apenas quando executado com a flag "-XX:+ShowCodeDetailsInExceptionMessages". Por exemplo, ao especificar esta flag, a exceção na linha

    var nome = user.getLocation().getCity().getName();

    resultará na saída da mensagem

    Exception in thread "main" java.lang.NullPointerException: Não é possível invocar "Location.getCity()"
    porque o valor de retorno de "User.getLocation()" é null
    at NullPointerExample.main(NullPointerExample.java:5):5)

    o que permite entender que o método Location.getCity() não foi chamado, e User.getLocation() retornou um valor null.

  • o operador de sequência opcional uma versão preliminar da ferramenta jpackage, permitindo a criação de pacotes para aplicativos Java autossuficientes (self-contained). A ferramenta é baseada no javapackager do JavaFX e permite a criação de pacotes em formatos nativos para várias plataformas (msi e exe para Windows, pkg e dmg para macOS, deb e rpm para Linux). Os pacotes incluem todas as dependências necessárias.
  • O coletor de lixo G1 o sinalizador -k para integração com um novo mecanismo de alocação de memória, levando em conta a especificidade do funcionamento em grandes sistemas que utilizam arquitetura NUMA. O novo alocador de memória é ativado com a flag «+XX:+UseNUMA» e pode aumentar significativamente a performance em sistemas NUMA.
  • Adicionado API para monitoramento em tempo real de eventos JFR (JDK Flight Recorder), por exemplo, para configurar monitoramento contínuo.
  • Adicionado módulo jdk.nio.mapmode, oferecendo novos modos (READ_ONLY_SYNC, WRITE_ONLY_SYNC) para a criação de buffers de bytes mapeados (MappedByteBuffer) que referenciam memória não volátil (NVM).
  • o operador de sequência opcional versão preliminar da API Foreign-Memory Access, permitindo que aplicativos Java acessem de forma segura e eficiente áreas de memória fora da heap Java, manipulando novas abstrações como MemorySegment, MemoryAddress e MemoryLayout.
  • Declarados os ports obsoletos para o sistema operacional Solaris e processadores SPARC (Solaris/SPARC, Solaris/x64 e Linux/SPARC) com a intenção de remover esses ports no futuro. A transição dos ports mencionados para o estado de obsoletos permitirá à comunidade acelerar o desenvolvimento de novas funcionalidades no OpenJDK, sem gastar tempo na manutenção de características específicas do Solaris e SPARC.
  • Removido o coletor de lixo CMS (Concurrent Mark Sweep), que foi declarado obsoleto há dois anos e ficou sem suporte (o coletor de lixo G1 já substituiu o CMS há bastante tempo). Além disso, declarado obsoleto o uso da combinação de algoritmos de coleta de lixo ParallelScavenge e SerialOld (executando com as opções «-XX:+UseParallelGC -XX:-UseParallelOldGC»).
  • Suporte experimental fornecido para o coletor de lixo ZGC (Z Garbage Collector) nas plataformas macOS e Windows (anteriormente suportado apenas no Linux). O ZGC opera em modo passivo, minimizando, na medida do possível, as latências devido à coleta de lixo (o tempo de parada ao usar ZGC não excede 10 ms.) e pode operar tanto com heaps pequenas quanto enormes, variando de algumas centenas de megabytes a muitos terabytes.
  • método não padrão ferramentas e API para compactação de arquivos JAR utilizando o algoritmo Pack200.

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