Introdução
O Java 8 teve o seu lançamento em Março 2014 e teremos entrado no habitual ciclo de 2 anos para um novo lançamento. O Java 9 irá, alegadamente, ser lançado em 2016.
A comunidade OpenJDK está fervilhante e acaba de ser publicada uma lista inicial de JEPs (JDK Enhancement Proposals) para a nova versão e alguns JSRs (Java Specification Requests) já estão a ser trabalhados.
Algumas das principais novidades são: o projecto Jigsaw, melhorias significativas de desempenho e algumas APIs muito aguardadas, como atualizações da Process API, JSON como parte do java.util e uma API para tratamento de dinheiro.
Para aqueles que queiram estar na crista da onda, os builds do JDK 9 já estão disponíveis aqui.
Nota: este artigo refere-se à lista de funcionalidades actualizada até 09-Set-2014
Conteúdo
Projecto Jigsaw - código fonte modular
O objetivo do Projecto Jigsaw é tornar o Java mais modular e dividir o JRE em componentes interoperáveis. Esta JEP é o primeiro de quatro passos para o Jigsaw e não vai alterar a estrutura actual do JRE e JDK. O objetivo deste passo é reorganizar o código fonte do JDK em módulos, melhorar o sistema de build para compilar módulos e impor limites aos módulos, em tempo de compilação. O Jigsaw foi originalmente planeado para o Java 8, mas foi adiado e redirecionado para o Java 9.
Actualizações Process API
Até agora tem havido uma capacidade limitada para o controlo e gestão de processos do Sistema Operativo com o Java. Por ex., hoje, para fazer algo tão simples como obter o PID do processo hoje, é necessário aceder a código nativo ou usar algum tipo de workaround. Pior do que isso, será necessária uma implementação diferente para cada plataforma, de modo a garantir que está a receber o resultado certo.
O objectivo é ter algo como isto (que também suporte todos os sistemas operativos):
System.out.println ("O pid é" + Process.getCurrentPid ());
A actualização vai estender a capacidade do Java interagir com o sistema operativo: novos métodos diretos para lidar com PIDs, nomes de processos e estados, capacidade de enumerar JVMs e processos e muito mais.
JSON API leve
Já existem alternativas disponíveis para lidar com o JSON em Java. A novidade com esta API é que o JSON se tornaria parte integrante da linguagem, seria leve e usaria os novos recursos do Java 8. Para além disso, o JSON seria disponibilizado directamente através do package java.util (Ao contrário do JSR 353, que usa um package externo ou outras alternativas).
API para divisas e dinheiro
Após uma nova API de Data e Hora, introduzida no Java 8, a nova versão irá trazer uma nova API oficial para representar, transferir e efectuar cálculos com dinheiro e divisas. Para saber mais sobre esta API, deve consultar o projecto JavaMoney no GitHub. Eis alguns destaques:
- Dois novos tipos: Money e FastMoney:
FastMoney amt2 = FastMoney.of(123456789, "USD"); // FastMoney is up to 5 dec places
Money total = amt1.add(amt2);
- Formatar dinheiro de acordo com o país:
MonetaryFormats.getAmountFormat(Locale.GERMANY);
System.out.println(germanFormat.format(monetaryAmount)); // 1.202,12 USD
Melhorias de gestão de Locks
A contenção de locks é um gargalo de desempenho em muitas aplicações multi tarefa em Java. A proposta foca-se em melhorar o desempenho dos monitores de objectos Java, medido por diferentes benchmarks.
Este tipo de testes de stress puxam a JVM ao limite e tentam determinar a taxa de transferência máxima que se pode alcançar, geralmente em termos de mensagens por segundo. A ambiciosa métrica de sucesso para esta JEP é uma melhoria significativa em 22 benchmarks diferentes. Se o resultado for alcançado, estas melhorias de desempenho serão incluídas no Java 9.
Cache de código segmentada
Outra melhoria de desempenho no Java 9 vira do compilador JIT. Quando certas áreas de código são executadas rapidamente, a JVM compila-as para código nativo e armazena-as na cache de código. Esta proposta visa segmentar a cache de código para diferentes áreas de código compilado, de forma a melhorar o desempenho do compilador.
Em vez de uma única área, a cache de código será dividida em 3:
- O código que vai ficar para sempre na memória cache (interno à JVM / código non-method)
- Tempo de vida curto (código perfilado, específico a um determinado conjunto de condições)
- Potencialmente de longa vida (código não perfilado)
Smart Java Compilation – fase 2
A ferramenta Smart Java Compilation, ou sjavac, foi trabalhada pela primeira na JEP 139, a fim de melhorar a velocidade de construção do JDK por ter o compilador javac a ser executado em todos os núcleos. Nesta proposta, entra na Fase 2, onde será melhorada e generalizada para que possa ser usada como padrão e construir outros projetos que não apenas o JDK.
Outras novidades prováveis
Para além das funcionalidades anteriores, que já estão a ser desenvolvidas, é provável a inclusão das seguintes:
- Cliente HTTP 2 (JEP 110)
- Projecto Kulla - REPL in Java (Read Evaluate Print Loop)