Recursos e melhorias do Java 9



A estrutura modular desenvolvida no Projeto Jigsaw e os principais recursos do Java 9 neste blog são JShell (ferramenta REPL), mudanças importantes de API e mudanças no nível de JVM.

O lançamento dos recursos Java 9 e Java 9 é um marco para o ecossistema Java.Manter-se atualizado com os novos lançamentos é importante para se manter atualizado com a tecnologia e entender a necessidade por trás do que é apresentado o deixará mais perto de seu .A estrutura modular desenvolvida no Projeto Jigsaw fará parte deste lançamento do Java SE e os principais recursos deste são o JShell (ferramenta REPL), mudanças importantes na API e mudanças no nível da JVM para melhorar o desempenho e a capacidade de depuração da JVM.

Antes de desvendar os recursos do Java 9 em detalhes, vamos dar uma olhada nas versões anteriores do Java e ver quais eram as deficiências e como o Java 9 ajudou a superar essas anomalias: -





  • A plataforma Java Standard Edition e o JDK não eram navegáveis ​​para pequenos dispositivos de computação
  • Não havia segurança geral e manutenção do JDK
  • Não houve melhora geral no desempenho do aplicativo
  • Era difícil para os desenvolvedores Java construir e manter as bibliotecas de código e aplicativos maiores, para as plataformas Java SE e EE

Nesta postagem do blog, categorizarei os recursos do Java 9 da seguinte maneira:



  1. Atualizações de API de processo em Java 9
  2. Cliente HTTP / 2 em Java 9
  3. Java Shell Scripting (Read-Eval-Print-Loop) em Java 9
  4. Recurso de arquivos JAR de várias versões no Java 9
  5. Mais recursos de atualizações de simultaneidade no Java 9
  6. Projeto Jigsaw em Java 9

O que há de novo no Java 9?

Eu escolhi alguns recursos novos do Java 9, que acho que vale a pena conhecer. Vamos ver quais são esses recursos: -

matriz de objetos em java

Atualizações de API de processo em Java 9

A API de processo do Java é bastante primitiva,com suporte apenas para lançar novos processos, redirecionar a saída dos processos e fluxos de erro. Nesta versão, as atualizações para a API de processo permitem o seguinte:

  • Obter o PID do processo JVM atual e quaisquer outros processos gerados pela JVM
  • Enumere os processos em execução no sistema para obter informações como PID, nome e uso de recursos
  • Gerenciando árvores de processo
  • Gerenciando subprocessos

Vejamos um código de amostra, que imprime o PID atual, bem como as informações do processo atual:



public class NewFeatures {public static void main (String [] args) {ProcessHandle currentProcess = ProcessHandle.current () System.out.println ('PID:' + currentProcess.getPid ()) ProcessHandle.Info currentProcessInfo = currentProcess.info () System.out.println ('Info:' + currentProcessInfo)}

Cliente HTTP / 2 em Java 9

Espera-se que esse recurso do Java 9 mude nas versões subsequentes e pode até ser removido completamente.

Mais cedo Os desenvolvedores geralmente recorrem ao uso de bibliotecas de terceiros, como Apache HTTP, Jersey e assim por diante. Além disso, a API HTTP do Java é anterior à especificação HTTP / 1.1 e é síncrona e difícil de manter. Essas limitações exigiram a necessidade de adicionar uma nova API. A nova API de cliente HTTP fornece o seguinte:

  • Uma API simples e concisa para lidar com a maioria das solicitações HTTP
  • Suporte para especificação HTTP / 2
  • Melhor performance
  • Melhor segurança
  • Mais algumas melhorias

Vejamos um exemplo de código para fazer uma solicitação HTTP GET usando as novas APIs. Abaixo está a definição do módulo definida no arquivo module-info.java:

novos recursos do módulo {requer jdk.incubator.httpclient}

O código a seguir usa a API do cliente HTTP, que faz parte do módulo jdk.incubator.httpclient:

import jdk.incubator.http. * import java.net.URI public class Http2Feature {public static void main (String [] args) lança Exceção {HttpClient client = HttpClient.newBuilder (). build () HttpRequest request = HttpRequest .newBuilder ( novo URI (http://httpbin.org/get)) .GET () .version (HttpClient.Version.HTTP_1_1) .build () HttpResponse.String response = client.send (request, HttpResponse.BodyHandler.asString ()) System.out.println ('Código de status:' + response.statusCode ())
System.out.println ('Response Body:' + response.body ())}}}

Java Shell Scripting (Read-Eval-Print-Loop) em Java 9

Você deve ter visto linguagens, como Ruby, Scala, Groovy, Clojure e outras enviadas com uma ferramenta, que geralmente é chamada REPL ( Read-Eval-Print-Loop ) Esta ferramenta REPL é extremamente útil para experimentar os recursos da linguagem. Por exemplo, em Scala, podemos escrever um programa simples Hello World como scala> println (“Hello World”)

Algumas das vantagens do JShell REPL são como segue:

  • Desenvolvedores experientes podem criar protótipos e experimentar rapidamente antes de adotá-lo em sua base de código principal
  • Os desenvolvedores Java agora podem se orgulhar de um REPL

Vamos executar o comando JShell, conforme mostrado na imagem a seguir:

Exemplo de JShell Hello World - Java 9 - Edureka

Recurso de arquivos JAR de várias versões no Java 9

A partir de agora, os arquivos JAR podem conter classes que só podem ser executadas na versão Java para a qual foram compilados. Para potencializar os novos recursos da plataforma Java em versões mais recentes, os desenvolvedores da biblioteca precisam lançar uma versão mais recente de sua biblioteca. Em breve, haverá várias versões da biblioteca sendo mantidas pelos desenvolvedores, o que pode ser um pesadelo. Para superar essa limitação, esses recursos do Java 9 de arquivos JAR de várias versões permitem que os desenvolvedores criem arquivos JAR com diferentes versões de arquivos de classe para diferentes versões de Java.O exemplo a seguir torna isso mais claro.

Aqui está uma ilustração dos arquivos JAR atuais:

jarra raiz - Uma aula - B.class - C.class

Esta é a aparência dos arquivos JAR de várias versões:

string java dividir vários delimitadores
jarra raiz - Uma aula - B.class - C.class - META-INF - versões - 9 - Uma aula - 10 - B.class

Na ilustração anterior, os arquivos JAR suportam arquivos de classe para duas versões Java – 9 e 10.

Portanto, quando o JAR anterior é executado no Java 9, a A.class nas pastas versões - 9 são selecionadas para execução.

Em uma plataforma que não oferece suporte a arquivos JAR de vários lançamentos, as classes no diretório de versões nunca são usadas. Portanto, se você executar o arquivo JAR de vários lançamentos no Java 8, é tão bom quanto executar um arquivo JAR simples.

Mais recursos de atualizações de simultaneidade no Java 9

Nesta atualização, uma nova classe, java.util.concurrent.Flow foi introduzido, que possui interfaces aninhadas que suportam a implementação de uma estrutura publicar-assinar. A estrutura publicar-assinar permite que os desenvolvedores criem componentes que podem consumir de forma assíncrona um fluxo de dados ao vivo configurando editores que produzem os dados e assinantes que consomem os dados por meio de assinatura, que os gerencia. As quatro novas interfaces são as seguintes:

  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.Subscription
  • java.util.concurrent.Flow.Processor (que atua como Publicador e Assinante).

Projeto Jigsaw em Java 9

O principal objetivo deste projeto é introduzir o conceito de modularidade Apoio, suporte para criar módulos em Java 9 e, em seguida, aplicar o mesmo ao JDK isso é, modularizar o JDK .

Alguns dos benefícios do modularidade são como segue:

  • Encapsulamento forte : Os módulos podem acessar apenas as partes do módulo que foram disponibilizadas para uso. Portanto, as classes públicas em um pacote não são públicas, a menos que o pacote seja explicitamente exportado no arquivo de informações do módulo.
  • Limpar Dependências : Os módulos devem declarar quais outros módulos eles estariam usando por meio da cláusula require.
  • Combinar módulos para criar um tempo de execução menor, que pode ser facilmente dimensionado para dispositivos de computação menores.
  • Confiável : Os aplicativos são mais confiáveis, eliminando tempo de execução erros . Exemplo:- você deve ter experimentado a falha de seu aplicativo durante o tempo de execução devido à falta de classes, resultando em ClassNotFoundException .

Existem vários JEPs , que fazem parte deste projeto, da seguinte forma:

  • JEP 200 - JDK modular : Isso aplica o sistema de módulo da plataforma Java para modularizar o JDK em um conjunto de módulos que podem ser combinados em tempo de compilação, tempo de construção ou tempo de execução.
  • JEP 201 - código-fonte modular : Isso modulariza o código-fonte JDK em módulos e aprimora as ferramentas de construção para compilar os módulos.
  • JEP 220 - imagens de tempo de execução modulares : Isso reestrutura as imagens de tempo de execução JDK e JRE para acomodar módulos e melhorar o desempenho, segurança e capacidade de manutenção.
  • JEP 260 - encapsula a maioria das APIs internas : Isso permite que muitas APIs internas sejam acessadas diretamente ou por meio de reflexão. Acessar APIs internas que estão sujeitas a mudanças é bastante arriscado. Para evitar seu uso, eles estão sendo encapsulados em módulos e apenas as APIs internas amplamente utilizadas estão sendo disponibilizadas até que uma API adequada esteja em seu lugar.
  • JEP 261 - sistema de módulo : Isso implementa a especificação Java do sistema de módulo alterando a linguagem de programação Java, JVM e outras APIs padrão
  • JEP 282: jlink, o vinculador Java : Isso permite empacotar módulos e suas dependências em tempos de execução menores.

Portanto, era tudo sobre o Java 9 e os novos recursos do Java 9.

Agora que você entendeu os recursos do Java 9, verifique o pela Edureka, uma empresa de aprendizagem online confiável com uma rede de mais de 250.000 alunos satisfeitos espalhados por todo o mundo.

G não é uma pergunta para nós? Mencione isso na seção de comentários deste blog “Java 9” e entraremos em contato com você o mais breve possível.