X

Saiba como a nuvem e as novas tecnologias habilitam a transformação nos negócios e na sociedade.

A chegada do Java 16

This is a syndicated post, view the original post here

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 recursos como parte da cadência de seis meses.

Por Sharat Chander*

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

•    Flexível por se adaptar ao cenário tecnológico em constante mudança enquanto manteve-se independente de plataforma.

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

•    Eficiente por 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, ele 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.

-Leia mais: Celebrando 25 Anos do Java

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 recursos como parte da cadência de seis meses. Este 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.

O Java 16 já está disponível!
A Oracle agora oferece o Java 16 para todos os desenvolvedores e empresas.  O Oracle JDK 16 receberá um mínimo de duas atualizações trimestrais, de acordo com o  cronograma do Oracle Critical Patch Update (CPU), antes do lançamento do Oracle JDK 17. O Java 17 atingirá a disponibilidade geral em setembro de 2021, mas as compilações de acesso antecipado já estão sendo oferecidas em jdk.java.net.

Mais uma vez, a Oracle fornece o Java 16 como a versão do Oracle OpenJDK usando a GNU General Public License v2 de software livre, com o Classpath Exception (GPLv2+CPE), e também sob uma licença comercial para aqueles que usam a versão Oracle JDK como parte de um produto ou serviço Oracle, ou para aqueles que querem ser capazes de obter suporte comercial.
Java 16, Juntos

Semelhante aos lançamentos anteriores, continuamos a celebrar as contribuições feitas para o Java 16 de muitos indivíduos e organizações na Comunidade OpenJDK — todos nós construímos o Java, juntos!

Taxa de correção do JDK 16
A taxa global de mudança ao longo do tempo no JDK permaneceu essencialmente constante por muitos anos, mas sob a cadência de seis meses, o ritmo no qual as inovações prontas para a produção são entregues melhorou muito.

Em vez de disponibilizar dezenas de milhares de correções e cerca de cem JDK Enhancement Proposals (JEPs) em um grande lançamento a cada alguns anos, os aprimoramentos são entregues em versões menores de recurso em um cronograma de seis meses mais gerenciável e previsível. Essas alterações podem variar de um recurso significativo a pequenas melhorias, a manutenção de rotina, correções de bugs e melhorias na documentação. Cada alteração é representada em um único commit para um único problema no JDK Bug System.

Dos 1.897 problemas marcados como corrigidos no Java 16, 1.397 foram concluídos por pessoas que trabalham para a Oracle, enquanto que500 foram contribuídos por desenvolvedores individuais e desenvolvedores que trabalham para outras organizações. Analisando os problemas e agrupando os dados da organização dos destinatários resulta no gráfico a seguir de organizações que patrocinam o desenvolvimento de correções no Java 16:

A Oracle gostaria de agradecer aos desenvolvedores que trabalham para organizações como ARM, SAP, Red Hat e Tencent por suas contribuições notáveis.  Também somos gratos por ver contribuições de organizações menores, como Ampere Computing, Bellsoft, DataDog, Microdoc e desenvolvedores independentes que contribuíram coletivamente com 3% das correções no Java 16.
Somos igualmente gratos aos muitos desenvolvedores experientes que analisaram as alterações propostas, aos usuários pioneiros que experimentaram compilações de acesso antecipado e relataram problemas, e aos profissionais dedicados que forneceram feedback nas as listas de endereçamento do OpenJDK.

Os seguintes indivíduos forneceram feedback inestimável sobre a qualidade da compilação, registraram bugs de forma eficaz ou ofereceram atualizações frequentes:

•    Jaikiran Pai (Formiga Apache)
•    Gary Gregory (Apache Commons)
•    Uwe Schindler (Apache Lucene)
•    Robert Scholte (Apache Maven)
•    Mark Thomas (Apache Tomcat)
•    Enrico Olivelli (Zookeeper Apache)
•    Rafale Winterhalter (Byte Buddy)
•    Peter Karich (Graph Hopper)
•    Evgeny Yavits (JaCoCo)
•    Marc Hoffman (JaCoCo)
•    Vincent Privat (JOSM)
•    Christain Stein (JUnit 5)
•    David Karnok (RxJava)

Além disso, por meio do programa Quality Outreach, gostaríamos de agradecer aos seguintes projetos FOSS (software de código livre e aberto) e indivíduos que forneceram um excelente feedback ao testar as compilações de acesso antecipado do Java 16 para ajudar a melhorar a qualidade do lançamento.

•    Apache Ant
•    Apache Derby (Rich Hillegas)
•    Apache Lucene
•    Apache Maven
•    Apache Tomcat
•    Apache Wicket (Martin Grigorov)
•    Apache ZooKeeper
•    Colecções Eclipse (Nikhil Nanivadekar)
•    eo-yaml (Mihai Andronache)
•    FXGL (Almas Baimagambetov)
•    FXyz (Sean Phillips)
•    Java Katas (Chandra Guntur)
•    GraphHopper
•    Hibernate ORM
•    Hibernate Validator
•    Hibernate Search
•    Hibernate Reactive (Sanne Grinovero & Yoann Rodiere)
•    JobRunr (Ronald Dehuysser)
•    jOOQ (Lukas Eder)
•    MyBatis (Iwao Ave)
•    Micrometer (Tommy Ludwig)
•    RxJava
•    Sejda
•    PDFsam (Andrea Vacondio)

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

Algumas melhorias são introduzidas nos módulos da incubadora, um meio de colocar APIs e ferramentas não finais nas mãos dos desenvolvedores que permite que os usuários ofereçam feedback que pode melhorar a qualidade da plataforma Java.

Da mesma forma, alguns aprimoramentos são introduzidos como recursos de visualização, linguagem ou recursos de VM da Java SE Platform que são completamente especificados, completamente implementados e, ainda assim, impermanentes. Eles são disponibilizados em versões de recursos do JDK para provocar o feedback do desenvolvedor com base no uso do mundo real, o que pode levá-los a se tornarem permanentes em uma versão futura.  Isso oferece aos usuários a oportunidade de fornecer feedback oportuno, além de permitir que os fornecedores de ferramentas tenham a oportunidade de criar suporte para o recurso antes que a maior parte dos desenvolvedores Java o usem na produção.

Os 17 JEPs  entregues com o 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 prévio no Java 14 e novamente no Java 15, o Pattern Matching aprimora a linguagem de programação Java com correspondência de padrões para a instanceof (instância do) operador.

A correspondência de padrões 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.

JEP 395 Records
Também introduzido pela primeira vez como um recurso prévio no Java 14 e novamente no Java 15, o Records fornece uma sintaxe compacta para declarar classes que são titulares transparentes para dados superficialmente imutáveis. Isso reduzirá significativamente a verbosidade dessas classes e melhorará a legibilidade e a manutenção do código.

2. Melhorias JVM
JEP 376 Processamento Simultâneo de Rosca ZGC
O JEP 376 move o processamento de pilha de rosca ZGC de pontos de segurança para uma fase simultânea, permite pausas de sub-milissegundos dentro dos pontos de segurança GC, mesmo em grandes pilhas. A remoção da fonte final de latência no coletor de lixo ZGC melhorará muito o desempenho e a eficiência dos aplicativos neste e nos lançamentos subsequentes.

JEP 387 Metaespaço Elástico
Este recurso retorna memória de metadados de classe VM HotSpot não utilizada (ou seja, metaespaço) para o sistema operacional mais prontamente, reduzindo a presença de metaespaço. Aplicativos com atividade de carga e descarga de classe pesada podem acumular muito espaço não utilizado.

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

3. Novas Ferramentas e Bibliotecas
JEP 380 Canais de Soquete de Domínio Unix

Os soquetes de domínio Unix são, há muito tempo, um recurso da maioria das plataformas Unix e agora são suportados no Windows 10 e no Windows Server 2019. Este recurso adiciona suporte de soquete de domínio Unix (AF_UNIX) ao canal de soquete e às APIs de canal de soquete de servidor no pacote java.nio.channels. Ele estende o mecanismo de canal herdado para suportar canais de soquete de domínio Unix e canais de soquete de servidor.

Os Soquetes de domínio Unix são usados para comunicação entre processos (IPC) no mesmo host. Eles são semelhantes aos soquetes TCP/IP na maioria dos aspectos, exceto que eles são endereçados por nomes de caminhos do sistema de arquivos em vez de endereços IP (Internet Protocol) e números de porta. 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 Ferramenta de Empacotamento
Este recurso foi introduzido pela primeira vez como um módulo de incubadora no Java 14. Esta ferramenta permite empacotar aplicativos Java independentes. Ele suporta formatos de embalagem nativos para proporcionar 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 lançamento sejam especificados no tempo de empacotamento e podem ser invocados diretamente, a partir da linha de comando ou programaticamente, através da API do ToolProvider. Observe que o nome do módulo jpackage muda de jdk.incubator.jpackage para jdk.jpackage. Isso melhorará a experiência do usuário final ao instalar aplicativos e simplificará as implementações usando o modelo de "loja de aplicativos”.

4. Garantindo a Permanência do Seu Trabalho
JEP 390 Avisos para classes baseadas em valor
Este recurso designa as classes wrapper primitivo (java.lang.Integer, java.lang.Double, etc.) como baseadas em valor (semelhante a java.util.Optional e java.time.LocalDateTime) e adiciona forRemoval aos seus construtores, que estão preteridos desde o JDK 9, solicitando novos avisos.  Ele fornece avisos sobre tentativas impróprias de sincronização em instâncias de quaisquer classes baseadas em valor na Plataforma Java. Muitos projetos populares de software livre já responderam aos avisos de reprovação do Java 9 removendo chamadas de construtor wrapper de suas fontes, e podemos esperar que muitos mais o façam, dada a crescente urgência de avisos "preteridos para remoção".

JEP 396 Faça o Encapsulamento Forte dos JDK Internos por Padrão
Esse recurso faz o encapsulamento forte de todos os elementos internos do JDK por padrão, exceto para as APIs internas críticas, como sun.misc.Unsafe. O código compilado com sucesso com versões anteriores que acessam APIs internas do JDK pode não funcionar mais por padrão. Esta mudança visa incentivar 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 complicações para futuras versões do Java. O encapsulamento forte é controlado pela opção do inicializador --acesso ilegal, para JDK 9 até JDK 15 padrão para warning, e começar com o JDK 16 padrão para deny. Ainda é possível (por enquanto) relaxar o encapsulamento de todos os pacotes com uma única opção de linha de comando, no futuro, apenas abrindo pacotes específicos com -add-opens funcionará.

5. Características de Incubadora e Visualização
JEP 338 API Vector (Incubadora)

Esta API de incubadora 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 vetorial ideais em arquiteturas de CPU suportadas e, assim, alcançar desempenho superior a cálculos escalares equivalentes. Ela permite tirar proveito das instruções SIMD (Single Instruction, Multiple Data) disponíveis na maioria das CPUs modernas. Embora o HotSpot ofereça suporte à vetorização automática, o conjunto de operações escalares transformáveis é limitado e frágil a mudanças no código. Esta API permitirá que os desenvolvedores escrevam facilmente algoritmos vetoriais portáteis e de desempenho em Java.

JEP 389 API Foreign Linker (Incubadora)
Esta API de incubadora oferece acesso de java pura e digitada estaticamente ao código nativo. Esta API simplificará consideravelmente o processo complicado e propenso a erros de vinculação a uma biblioteca nativa. O Java suporta chamadas de métodos nativos através da Java Native Interface (JNI) desde o Java 1.1, mas é duro e frágil. Os desenvolvedores Java devem ser capazes de (principalmente) apenas usar qualquer biblioteca nativa que seja considerada útil para uma tarefa específica. Também  fornece suporte de função estrangeira sem a necessidade de qualquer código de cola JNI interveniente.

JEP 393 API de Acesso a Memória Estrangeira (3a Incubadora)
Introduzida pela primeira vez como uma API incubadora 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 estrangeira (por exemplo, memória nativa, memória persistente, memória heap gerenciada, etc.). Ela também fornece a base para a API Foreign Linker.

JEP 397 Classes Seladas (2a Pré-visualização)
Este recurso de visualização restringe quais outras classes ou interfaces podem estendê-las ou implementá-las. Permite ao autor de uma classe ou interface controlar qual código é responsável pela sua implementação. Além disso, fornece uma maneira mais declarativa do que os modificadores de acesso para restringir o uso de uma superclasse. E suporta direções futuras na correspondência de padrões ao sustentar a análise exaustiva de padrões.

6. Melhorando a Produtividade para Desenvolvedores OpenJDK
O resto das alterações não são diretamente visíveis para os desenvolvedores Java (aqueles que usam Java para codificar e executar aplicativos), mas apenas para os desenvolvedores de Java (aqueles que trabalham no OpenJDK).

JEP 347 Habilita recursos de linguagem C++14 (no código fonte JDK)
Isso permite o uso de recursos de linguagem C++14 no código-fonte JDK C++ e fornece orientações específicas sobre quais desses recursos podem ser usados no código HotSpot. Através do JDK 15, os recursos de linguagem usados pelo código C++ no JDK foram limitados aos padrões de linguagem C++98/03. Isso requer a atualização da versão mínima aceitável de vários compiladores de plataforma.

JEP 357 Migra do Mercurial para o Git
JEP 369 Migra para o GitHub

Esses JEPs migram os repositórios de códigos-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 as ferramentas  jcheck, webrev, e defpath para o Git. O Git reduz o tamanho dos metadados (cerca de ¼ do tamanho) preservando o espaço em disco local e reduzindo o tempo de clonagem. Ferramentas modernas são melhor integradas ao Git do que ao Mercurial. Os repositórios OpenJDK Git estão agora em https://github.com/openjdk

JEP 386 Porta Alpine Linux
JEP 388 Porta Windows/AArch64

O foco destes JEPs não é o esforço de portabilidade em si, que já foi feito, mas integrá-los no repositório da linha principal da JDK.

O JEP 386 porta o JDK para o Alpine Linux e outras distribuições que usam o musl como sua Biblioteca C primária em x64 e AArch64. Além disso, o JEP 388 porta o JDK para Windows AArch 64 (ARM64).

Suporte de ferramentas
O suporte de ferramentas atual 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 para o Java 16 com os seguintes IDEs:

•    JetBrains IDEA
•    Eclipse Marketplace

O Java continua a ser a principal linguagem de programação escolhida pelos programadores de software.

Como a entrega pontual de melhorias com o Java 16 demonstra, por meio do planejamento criterioso, contínuo além do envolvimento do ecossistema, a plataforma Java está bem-posicionada para o desenvolvimento moderno e crescimento na nuvem.

Não deixe de se manter atualizado com as notícias e atualizações ao:

•    Visitar Inside.Java (notícias e visualizações da Equipe Java na Oracle)

•    Ouvir o Inside.Java podcasts (um programa para Desenvolvedores Java trazido diretamente das pessoas que fazem o Java na Oracle. Discutiremos a linguagem, a JVM, o OpenJDK, a segurança da plataforma, projetos de inovação como o Loom e o Panama e tudo mais).

•    Inscreva-se no Listas de endereçamento do OpenJDK(o lugar para saber mais sobre o progresso dos seus projetos OpenJDK favoritos).

*Sharat Chander é Diretor de Gestão de Produtos JAVA SE

Be the first to comment

Comentários ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.