Pular para o conteúdo principal

Novidades do Java 16

 


Novidades do Java 16


2020 provou ser um ano memorável para Java, pois comemoramos seu 25º aniversário. Com mais de duas décadas de inovação, Java continuou a ser:


  • Flexível ao se adaptar ao cenário de tecnologia em mudança, enquanto permanece independente da plataforma.

  • Confiável por manter a compatibilidade com versões anteriores.

  • Desempenho ao acelerar a inovação sem sacrificar a segurança.


Juntamente com a capacidade do Java de aumentar o desempenho, a estabilidade e a segurança da plataforma ao longo do caminho, ela continua a ser a linguagem de programação mais popular do mundo entre os desenvolvedores. De acordo com o último relatório da IDC “Java Turns 25”, mais de nove milhões de desenvolvedores, representando 69% dos desenvolvedores em tempo integral em todo o mundo, usam Java - mais do que qualquer outra linguagem.


Demonstrando ainda mais o caminho de inovação contínua do Java, a Oracle tem o orgulho de anunciar a disponibilidade geral do Java 16, representando o sétimo lançamento de recurso como parte da cadência de seis meses. Esse nível de previsibilidade permite que os desenvolvedores gerenciem mais facilmente sua adoção de inovação, graças a um fluxo constante de mudanças esperadas. Assim, não é mais preciso esperar 3 anos ou mais para termos uma nova versão e experimentar novos recursos.


Evolução do Java desde o lançamento do Java 9 com releases a cada 6 meses. Fonte: https://blogs.oracle.com/java-platform-group/the-arrival-of-java-16



Java 16 disponível

O Java 16 pode ser baixado através do site da Oracle e também do projeto AdoptOpenJDK.


É esperado que a versão 17 seja a LTS, o suporte de longo prazo (acrônimo em inglês de long-term support) e será lançada em Setembro de 2021, porém já é possível fazer o download de compilações diárias no jdk.java.net.


Novidades do Java 16

Junto com milhares de atualizações de desempenho, estabilidade e segurança, o Java 16 oferece aos usuários dezessete melhorias / alterações principais (conhecidas como JDK Enhancement Proposals - JEPs), incluindo três módulos de incubadora e um recurso de visualização (preview feature).


Alguns aprimoramentos são introduzidos nos módulos Incubator, um meio de colocar APIs e ferramentas não finais nas mãos dos desenvolvedores que permite aos usuários oferecer feedback que pode, em última análise, melhorar a qualidade da plataforma Java.


Da mesma forma, alguns aprimoramentos são introduzidos como recursos de visualização (Preview features), linguagem ou recursos de VM da plataforma Java SE que são totalmente especificados, totalmente implementados e, ainda assim, impermanentes. Eles são disponibilizados em lançamentos de recursos JDK para provocar feedback do desenvolvedor com base no uso do mundo real, o que pode fazer com que se tornem permanentes em um lançamento futuro. Isso oferece aos usuários a chance de fornecer feedback em tempo hábil, além de permitir aos fornecedores de ferramentas a oportunidade de construir suporte para o recurso antes que a maioria dos desenvolvedores Java o use na produção.


Os 17 JEPs entregues com Java 16 foram agrupados em seis categorias diferentes:


  1. Novos recursos de linguagem


JEP 394 Pattern Matching for instanceof


Introduzido pela primeira vez como um recurso de visualização no Java 14 e novamente no Java 15, o Pattern Matching aprimora a linguagem de programação Java com a correspondência de padrões para o operador instanceof.

Pattern Matching permite que a lógica comum em um programa, ou seja, a extração condicional de componentes de objetos, seja expressa de forma mais concisa e segura.


Antes:


if (obj instanceof String) {
    String s = (String) obj;    // grr...
    ...
}


Depois:


if (obj instanceof String s && s.length() > 5) {
    flag = s.contains("jdk");
}



JEP 395 Records


Também introduzido pela primeira vez como um recurso de visualização no Java 14 e novamente no Java 15, Records fornece uma sintaxe compacta para declarar classes que são portadores transparentes para dados imutáveis superficiais. Isso reduzirá significativamente o detalhamento dessas classes e irá melhorar a capacidade de leitura e manutenção do código. Este tipo de classe possui muitas restrições se comparadas com classes normais. Ex: 


  • Uma Record class não possui uma cláusula extends

  • Uma Record class não pode ser abstrata

  • Os atributos derivados da classe Record são todos finais

  • Não pode declarar campos de instância

  • Não pode declarar métodos nativos



  1. Melhorias na JVM


JEP 376 ZGC Concurrent Thread Processing


JEP 376 move o processamento da pilha de threads do ZGC de pontos seguros para uma fase simultânea, permitindo pausas de menos de milissegundos dentro dos pontos seguros de GC, mesmo em grandes heaps. A remoção da fonte final de latência no coletor de lixo ZGC irá melhorar muito o desempenho e a eficiência dos aplicativos nesta e nas versões subsequentes.


JEP 387 Elastic Metaspace


Este recurso retorna a memória de metadados de classe HotSpot VM não utilizada (ou seja, meta-espaço) para o sistema operacional mais prontamente, reduzindo a carga de meta-espaço (Footprint). Os aplicativos com atividades pesadas de carga e descarga de classe podem acumular muito espaço não utilizado.


O novo esquema aloca memória metaspace em pedaços menores, reduz a sobrecarga e a fragmentação do carregador de classes. Ele melhora a elasticidade, retornando a memória meta espacial não utilizada para o sistema operacional, o que leva a um maior desempenho do aplicativo e diminui a utilização da memória.


  1. Novas ferramentas e bibliotecas


JEP 380 Unix-Domain Socket Channels


Os soquetes de domínio Unix têm sido um recurso da maioria das plataformas Unix e agora são suportados no Windows 10 e Windows Server 2019. Este recurso adiciona suporte de soquete de domínio Unix (AF_UNIX) ao canal de soquete e APIs de canal de soquete de servidor no java pacote .nio.channels. Para comunicação local entre processos, os soquetes de domínio Unix são mais seguros e mais eficientes do que as conexões de loopback TCP / IP.


JEP 392 Packaging Tool


Esse recurso foi introduzido pela primeira vez como um módulo incubado no Java 14. Essa ferramenta permite empacotar aplicativos Java autocontidos. Ele oferece suporte a formatos nativos para oferecer aos usuários finais uma experiência de instalação natural. Esses formatos incluem msi e exe no Windows, pkg e dmg no macOS e deb e rpm no Linux. Ele também permite que os parâmetros de tempo de inicialização sejam especificados no momento do empacotamento e possam ser chamados diretamente, a partir da linha de comando ou programaticamente, por meio da API ToolProvider. Observe que o nome do módulo jpackage muda de jdk.incubator.jpackage para jdk.jpackage. Isso melhora a experiência do usuário final ao instalar aplicativos e simplificará as implantações usando o modelo de “loja de aplicativos”.


  1. Futureproofing Your Work (Prepare-se para o futuro)


JEP 390 Warning for Value-Based Classes


Este recurso designa as classes de wrapper primitivas (java.lang.Integer, java.lang.Double, etc) como baseadas em valor (semelhante a java.util.Optional e java.time.LocalDateTime) e adiciona forRemoval a seus construtores, que são obsoletos desde o JDK 9, gerando novos avisos. Ele fornece avisos sobre tentativas impróprias de sincronização em instâncias de quaisquer classes baseadas em valores na plataforma Java.


Muitos projetos de código aberto populares já responderam aos avisos de descontinuação desde o Java 9 removendo chamadas do construtor de wrapper de suas fontes, e podemos esperar que muitos mais façam isso, dada a urgência elevada de avisos de "descontinuado para remoção".


Código do construtor da classe java.lang.Integer



JEP 396 Strongly Encapsulate JDK Internals by default

Esse recurso encapsula fortemente todos os elementos internos da JDK por padrão, exceto para APIs internas críticas, como sun.misc.Unsafe. O código compilado com êxito com versões anteriores que acessa APIs internas do JDK pode não funcionar mais por padrão. Essa mudança visa encorajar os desenvolvedores a migrar do uso de elementos internos para o uso de APIs padrão, para que eles e seus usuários possam atualizar sem problemas para versões futuras do Java. O encapsulamento forte é controlado pela opção do iniciador --illegal-access, para JDK 9 até JDK 15, o padrão era um warning e, a partir do JDK 16, o padrão é negar. Ainda é possível relaxar o encapsulamento de todos os pacotes com uma única opção de linha de comando; no futuro, apenas a abertura de pacotes específicos com --add-opens funcionará.


  1. Incubator and Preview Features


Aqui serão listadas as features que entrarão como preview e não são garantia que permanecerão na plataforma em versões futuras.


JEP 338 Vector API (Incubator)


Esta API incubada fornece uma iteração inicial de uma API para expressar cálculos vetoriais que compilam de forma confiável em tempo de execução para obter instruções de hardware de vetor ideais em arquiteturas de CPU suportadas e, assim, atingir desempenho superior para cálculos escalares equivalentes. Ele permite tirar proveito das instruções Single Instruction Multiple Data (SIMD) disponíveis na maioria das CPUs modernas. Embora o HotSpot suporte a auto vetorização, o conjunto de operações escalares transformáveis é limitado e frágil a alterações no código. Essa API permitirá que os desenvolvedores escrevam facilmente algoritmos de vetor portáteis e de alto desempenho em Java.


JEP 389 Foreign Linker API (Incubator)


Esta API incubada oferece acesso puro ao Java com tipagem estática ao código nativo. Essa API simplificará consideravelmente o processo complicado e sujeito a erros de vinculação a uma biblioteca nativa. Java oferece suporte a chamadas de métodos nativos por meio da Java Native Interface (JNI) desde Java 1.1, mas é difícil e frágil. Os desenvolvedores Java devem ser capazes de usar qualquer biblioteca nativa considerada útil para uma tarefa específica. Ele também fornece suporte de função estrangeira sem a necessidade de qualquer código JNI.


JEP 393 Foreign Memory Access API (3rd Incubator)

Introduzida pela primeira vez como uma API incubada no Java 14 e novamente no Java 15, esta API permite que programas Java operem com segurança e eficiência em vários tipos de memória externa (por exemplo, memória nativa, memória persistente, memória heap gerenciada, etc.). Ele também fornece a base para a API do Linker Estrangeiro (Foreign Linker API).


JEP 397 Sealed Classes (2nd Preview)


Este recurso de visualização restringe quais outras classes ou interfaces podem estendê-los ou implementá-los. Ele permite que o autor de uma classe ou interface controle qual código é responsável por implementá-la. Além disso, fornece uma maneira mais declarativa do que os modificadores de acesso para restringir o uso de uma superclasse. E apóia futuras direções na correspondência de padrões, sustentando a análise exaustiva de padrões.

  1. Improving Productivity for OpenJDK Developers

O restante das mudanças não estão diretamente visíveis para desenvolvedores Java (aqueles que usam Java para codificar e executar aplicativos), mas apenas para desenvolvedores Java (aqueles que trabalham diretamente no OpenJDK).

JEP 347 Enable C++14 Language Features (in JDK source code)

Isso permite o uso de recursos da linguagem C++ 14 no código-fonte JDK que usa o C++ e fornece orientação específica sobre quais desses recursos podem ser usados no código HotSpot. Por meio do JDK 15, os recursos de linguagem usados pelo código C++ no JDK foram limitados aos padrões de linguagem C++ 98/03. Requer a atualização da versão mínima aceitável de vários compiladores de plataforma.

JEP 357 Migrate from Mercurial to Git

JEP 369 Migrate to GitHub

Estas JEPs migram os repositórios de código-fonte da Comunidade OpenJDK do Mercurial (hg) para o Git e os hospedam no GitHub para JDK 11 e posterior. A migração inclui a atualização de ferramentas como jcheck, webrev e defpath para Git. O Git reduz o tamanho dos metadados (cerca de ¼ do tamanho) preservando o espaço em disco local e reduzindo o tempo de clone. Ferramentas modernas são mais bem integradas ao Git do que ao Mercurial. Repositórios OpenJDK Git estão agora em https://github.com/openjdk

JEP 386 Alpine Linux Port
JEP 388 Windows/AArch64 Port

O foco destas JEPs não é o esforço de portabilidade em si, que já foi feito, mas integrá-las ao repositório de linha principal do JDK. O JEP 386 transporta o JDK para o Alpine Linux e outras distribuições que usam musl como sua biblioteca C primária em x64 e AArch64. Além disso, o JEP 388 transporta o JDK para o Windows AArch 64 (ARM64).

Suporte de ferramentas

O suporte de ferramentas atuais ajuda a aumentar a produtividade do desenvolvedor. Com o Java 16, continuamos a dar as boas-vindas aos esforços dos principais fornecedores de IDE, cujas soluções de ferramentas oferecem suporte aos desenvolvedores para as versões atuais do Java. Os desenvolvedores podem esperar receber suporte Java 16 com os seguintes IDEs:

Créditos: Blog Oracle






Comentários

Postagens mais visitadas deste blog

Certificação Java 11 - O que mudou

Certificação Java 11 - O que mudou A Oracle liberou recentemente uma atualização das suas certificações Java para atender a nova versão Java 11  LTS (Long Term Support) . Mas o que muda em relação a certificação Java 8? Preciso me atualizar? Por onde começo?  Neste post, vamos responder estas e outras questões sobre essa nova série de certificações. Caso você não tenha acompanhado a série sobre certificação, recomendo a leitura dos posts anteriores: https://www.guiadojava.com.br/2018/06/guia-da-certificacao-java-se-8.html Também temos um bate papo com os maiores especialistas de Java do mercado. Assista o replay aqui: https://events.genndi.com/replay/169105139238448348/23a5b3a7b0/0/83729443273C Nomenclatura e requisitos A partir de agora, você não receberá o certificado se fizer apenas a primeira prova, como era no Java 8 (1Z0-808 - Java SE 8 Programmer I). Você terá que fazer duas provas para obter o certificado " Oracle Certified Professional: Java SE 11 Dev

Java 15 - Novidades (ou não)

Java 15 - Novidades (ou não) O Java 15 já está em fase de testes com as suas features fechadas (Rampdown Phase One). Isso quer dizer que mais nenhuma feature será implementada. Teremos melhorias em funcionalidades já liberadas para testes e outras consolidadas agora nesta versão, mas nada de grandes mudanças. Porém é sempre bom ficar atualizado não é? Para acompanhar os builds e agenda da liberação, acesse esta página . Revisando o processo de versionamento Com o lançamento do  Java 9 em 2017 , o cronograma de lançamento do Java mudou, de um lançamento principal a cada  3 anos ou mais  para um lançamento a cada  seis meses . Um dos principais motivos dessa alteração foi oferecer aos desenvolvedores acesso mais rápido as melhorias contínuas. Os lançamentos ocorrem em  Março  e  Setembro  de cada ano. Ainda cabe um post específico para o modelo de versionamento para explicar sobre as versões LTS, versões intermediárias e funcionalidades " preview ". Para mais informações, veja

Guia da certificação Java SE 8 Programmer l - Parte 1: Conhecendo a certificação

Seja bem-vindo a série de postagens sobre a certificação Java. Como funciona, o que fazer para comprar, marcar o dia da prova e o principal, o que estudar. Para ver o índice da série e as datas das publicações, acesse este link Parte 1 – Conhecendo a certificação Nesta primeira parte, vamos navegar pelo site da Oracle Education e da Pearson VUE para conhecer como funciona a certificação e se ambientar. Ambos os site estão em Inglês e como já dito no índice da série, a prova não tem opção em português. Site da Oracle O site da Oracle não é um dos melhores em usabilidade. Então se procurar por certificação Java no Google, irá encontrar diversos cursos, livros e blogs falando a respeito da certificação menos o site da Oracle. Pois bem, abaixo o link direto para informações do exame 1Z0-808 - Java SE 8 Programmer I https://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=5001&get_params=p_exam_id:1Z0-808 Neste link você encontrará