JavaRush /Blogue Java /Random-PT /O Java 12 está aqui: o que há de novo?

O Java 12 está aqui: o que há de novo?

Publicado no grupo Random-PT
Portanto, Java apareceu no número 12. E mesmo que este não seja um lançamento LTS (ou seja, não tem suporte de longo prazo, não é um lançamento que terá suporte por muito tempo. A versão 11 é considerada o primeiro lançamento LTS com oito- período de suporte anual ), coisas interessantes apareceram nas atualizações. Vejamos os mais importantes deles. Lembre-se de que em Java, as propostas de mudança são abreviadas como jeps (de JDK Enhancement Proposal). O Java 12 está aqui: o que há de novo?  - 1

O JDK 12 do Jep mais interessante

189: Shenandoah: um coletor de lixo com baixo tempo de pausa (experimental) O coletor de lixo, Shenandoah, usa um novo algoritmo que reduz o tempo de execução limpando simultaneamente com a execução de threads Java. Nesse caso, o tempo de pausa no Shenandoah será o mesmo independente do tamanho do heap. Por alguma razão, a Oracle não incluiu Sheandoah em suas versões “oficiais”, apesar dos desenvolvedores considerarem esse recurso um dos mais importantes da nova versão. Portanto, se você planeja experimentar o Garbage Collector avançado, precisará usar versões de terceiros, como o Azul . 230: Microbenchmark Suite Microbenchmark é um microbenchmark que mede o desempenho de algum pequeno elemento. Em Java, eles são escritos e executados usando a estrutura JMH. Desde a versão 12, o JMH foi adicionado ao JDK, e já existem testes escritos nele, o que facilita a vida dos desenvolvedores. 325: Expressões Switch (Visualização) Uma nova forma de escrever uma expressão com uma instrução switch. A página de recursos fornece código de exemplo usando switch tradicional, onde o uso constante de break o torna desnecessariamente detalhado, levando a erros aleatórios frequentes.
switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        System.out.println(6);
        break;
    case TUESDAY:
        System.out.println(7);
        break;
    case THURSDAY:
    case SATURDAY:
        System.out.println(8);
        break;
    case WEDNESDAY:
        System.out.println(9);
        break;
}
Os autores da atualização propõem a introdução de uma nova forma de rótulo de switch “case L ->” para indicar claramente que apenas o código à direita do rótulo será executado se este rótulo for adequado. Assim, o código mostrado acima pode ser significativamente reduzido usando a nova sintaxe:
switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
    case TUESDAY                -> System.out.println(7);
    case THURSDAY, SATURDAY     -> System.out.println(8);
    case WEDNESDAY              -> System.out.println(9);
}
334: API de constantes JVM O conjunto de constantes contém as chamadas constantes carregáveis. São valores, por exemplo, do tipo String ou qualquer tipo primitivo, bem como artefatos de tempo de execução, como classes e métodos. Ao trabalhar com arquivos de classe, os programadores se beneficiariam de ferramentas convenientes para manipular constantes carregáveis. Os autores deste jep começaram a resolver esse problema introduzindo novos tipos de links simbólicos baseados em valores, cada um dos quais descreverá um tipo específico de constantes. Código de inovação . 340: Uma porta AArch64, não duas Este nome complexo esconde uma solução para um problema que surgiu no Java 9, quando portas ARM de 64 bits do Oracle e aarch64 da Red Hat apareceram no kit ao mesmo tempo. Além disso, já na época do lançamento do JDK 11, nem mesmo a própria Oracle suportava a versão de 64 bits das portas Oracle. Portanto, agora as portas Oracle de 64 bits foram removidas, deixando o ARM32 de 32 bits e o aarch64 de 64 bits, mais produtivo. 341: Arquivos CDS padrão Uma atualização muito boa, pois realmente acelera o lançamento de aplicativos. Não é nenhum segredo que quando um aplicativo Java é iniciado, um grande número de classes começa a ser carregado e este é um processo bastante demorado. CDS significa Class Data Sharing, e esta função permite compactar todas essas classes iniciadas na inicialização em um arquivo especial de compartilhamento de dados de classe, usando a lista padrão dessas mesmas classes. Como resultado, a velocidade de inicialização do aplicativo aumenta significativamente. 344: Coleções Mistas Abortáveis ​​para G1 G1 é um coletor de lixo que se tornou o principal coletor de lixo no JDK 9, substituindo o Parallel GC. No Java 10, o G1 aprendeu a coletar lixo em vários threads. Porém, nem todos ficaram satisfeitos com seu trabalho, um dos principais problemas eram as longas pausas. Agora eles podem ser cancelados. G1, com base na análise do comportamento do programa, determina a quantidade de trabalho e depois coleta os objetos “vivos” em um conjunto Collection até coletar tudo, sem parar. Muitas vezes o G1 errava no cálculo da quantidade de trabalho e trabalhava demais. Depois que o jep-344 for implementado, o G1 pode mudar para a coleta de lixo incremental e se a próxima etapa demorar mais para ser concluída do que o razoável, essa etapa poderá ser abortada. 346: Retornar prontamente a memória comprometida não utilizada do G1 E mais algumas atualizações no campo da já citada montadora G1. Às vezes acontecia que havia um monte de memória heap Java, mas ninguém usava essa memória. No Java 12, agora você pode “devolver” a memória inativa ao sistema operacional. Antes era muito raro o G1 abrir mão da memória, mas agora tudo foi simplificado. Com o novo recurso, a aplicação é definida como inativa se o intervalo desde a última compilação tiver expirado e não houver ciclo simultâneo. Outra situação é se ou se a função getloadavg(), que vem sendo monitorada há algum tempo, mostrar uma carga abaixo do limite aceitável definido. Se ocorrer um dos dois eventos, a coleta de lixo parcial será iniciada. O que o Java 12 não tem: Literais de String Brutos Muitos desenvolvedores estavam interessados ​​neste recurso, mas ele nunca apareceu nesta versão. Seus autores decidiram que ainda precisava de trabalho. Portanto, ousamos esperar que uma função para trabalho conveniente com literais de string apareça em uma das próximas versões do Java. O suporte para literais de string brutos permite trabalhar com informações de string independentemente do idioma. Isso elimina a necessidade de blindagem. Particularmente útil em expressões regulares, onde as barras invertidas são amplamente utilizadas, e no caminho do Windows, onde as barras invertidas são usadas como delimitadores. Ou seja, para evitar tais construções: C:\\My\\Test\\Pack\\
Todo programador frequentemente encontra uma ou outra dificuldade em seu trabalho. Às vezes estão associados à inexperiência do desenvolvedor, mas às vezes à imperfeição da própria ferramenta. Java é uma ótima linguagem, mas está longe de ser perfeita. Talvez você já tenha encontrado algo em Java e saiba o que gostaria de mudar na sua “ferramenta” (linguagem)? Compartilhe nos comentários!

conclusões

Não houve revolução no Java 12. No entanto, ninguém planejou isso. No entanto, uma série de inovações visam otimizar o funcionamento das aplicações e agilizar o trabalho, o que é uma boa notícia. A propósito, o IDEA já suporta JDK 12, então você pode testar seus recursos. É claro que poucas atualizações afetam diretamente os iniciantes, embora mesmo aqueles que acabaram de começar a aprender JavaRush possam brincar com a nova opção (depois de definir o sinalizador --enable-preview).
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION