[Pesquisar este blog]

quinta-feira, 5 de novembro de 2015

Java 9::o que esperar da próxima versão

Faz pouco mais de um ano e meio que o Oracle Java 8, última versão oficial, foi liberado para o público. Mas o trabalho de aperfeiçoamento e ampliação da plataforma está a pleno vapor! Depois dos métodos de extensão para interfaces, das expressões lambda, das operações em massa para coleções e da nova API para Data e Hora, dentre várias outras adições e melhorias da versão 8, o que esperar da próxima versão?

Blog Takipi

A plataforma Java continua em evidência, e não é por conta dos 3 bilhões de dispositivos que utilizam Java ao redor do mundo, conforme advertising da Oracle ao longo da instalação do Java, mas pelos números de sua utilização apurados pelo TIOBE Programming Community Index, uma apuração da popularidade das linguagens de programação feita há mais de 15 anos, mostra a hegemonia do Java neste período, com uma frequente primeira colocação, tendo sido superada pela veterana linguagem C em alguns momentos, como mostra a ilustração que segue que reflete os resultados de Outubro/2015. A diferença para o terceiro colocado é igualmente significativa.


Assim, o interesse na plataforma Java é plenamente justificado!

Novidades da Versão 9

A lista de novas features pretendidas para a versão 9 é razoavelmente ambiciosa. Citando apenas as JEP (JDK Enhancement Proposal) mais significativas temos:
  • jshell: The Java Shell (Read-Eval-Print Loop) [JEP 222]
  • Microbenchmark Suite [JEP 230]
  • Novo cliente para HTTP 2 [JEP 110]
  • Suporte para Unicode 7.0 e 8.0 [JEP 227 & 267]
  • Atualização da Process e da Concurrency API [JEP 102 & 266]
  • Coletor de lixo G1 como default [JEP 248]
  • Modularização do código fonte e da biblioteca run-time [JEP 201 & 220]
Com isso, o Java 9 trará o novo console jshell que permitirá testar, sem necessidade de construção de um programa completo, comandos e expressões diretamente, o que se denomina REPL (read-evaluate-print-loop). O jshell  já está disponível na versão de testes (ainda incompleta) do JDK9.

A pequena suite para microbenchmark facilitará, e muito, a construção e realização de testes de desempenho e análises comparativas com o código Java. Com isso, o programador poderá, de fato, determinar quais otimizações são realmente necessárias, sem necessitar de ferramentas externas de profiling.

O novo cliente HTTP 2 (assim como o suporte para Datagram Transport Layer Security - DTLS - e para TLS Application-Layer Protocol Negotiation Extension) são necessidades nestes novos tempos da internet, possibilitando a substituição de HttpURLConnection pelos novos websockets.

O suporte para as versões 7 e 8 do Unicode refletem a extrema maturidade do Java quando se consideram as necessidades de internacionalização e localização de aplicações, uma exigência para o desenvolvimento de software para empresas multinacionais e aplicativos globais.

As atualizações nas APIs de processos e concorrência deverão trazer um significativo ganho de performance (a se confirmar) para as aplicações envolvento múltiplos processos e threads, além de maior e melhor controle sobre processos do sistema operacional.

O coletor de lixo (garbage collector) G1 provavelmente se tornará o padrão da JVM. Isto significa um papel mais preponderante para o G1, visto ter sido introduzido no Java 7, sem contudo substituir os demais, pois a JVM continuará utilizar quatro coletores de lixo distintos, para diferentes aspectos da gerência de memória.

A modularização do código fonte e dos módulos runtime é uma característica, algo controversa, que pretende dividir o código binário, tanto do JRE como da aplicação do cliente em módulos, otimizando o uso de memória. O arquivo rt.jar (o runtime da JRE) contém hoje algo como 20.000 classes, algo bem inconveniente em termos de performance. A divisão em componentes menores e interoperáveis pode oferecer ganhos de performance e eventual redução do consumo de memória. Como deve ser garantida a compatibilidade com aplicações existentes, a questão é como esta modularização será indicada e obtida para novas aplicações. Um novo formato, diferente do jar (java archive) está em pauta aqui.

Além disso existem mais de 40 outros JEP a serem incorporados na versão 9, cujos impactos são bem mais específicos, embora todos importantes. A lista completa das JEP pode ser consultada no site do OpenJDK.

Também existem modificações comentadas e desejadas pela comunidade que não serão contempladas nesta versão, como uma nova API para moeda, uma API para JSON, entre outras.

Considerações finais

Do ponto de vista da linguagem de programação, a versão 9 não trará um conjunto de novidades tão expressivo como na versão 8, mas, de fato, isto é adequado. Java é uma plataforma madura, utilizada por milhões de desenvolvedores, portanto sua evolução deve ser contínua e muito bem planejada e executada.

Em resumo, uma nova versão, melhor do que a atual, em 22/09/2016. O plano é esse!

Em tempo, para experimentar as versões preliminares do Java 9 veja o link Oracle Java Early Access Downloads na seção Para Saber Mais.

Para saber mais


2 comentários:

Filipe disse...

Alguém tem algum código fonte que consegue mostrar a diferença entre o JDK 8 e o JDK 9?

Filipe disse...

Alguma tem algum código fonte que mostre a diferença entre o JDK 8 e o JDK 9?