quinta-feira, 18 de setembro de 2014

Java 9: Última lista de funcionalidades

Introdução

imageO 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.

Mais sobre a JEP 201

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.

Mais sobre a JEP 102

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).

Mais sobre a JEP 198

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:

Money amt1 = Money.of(10.1234556123456789, "USD"); // Money is a BigDecimal
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:

MonetaryAmountFormat germanFormat =
    MonetaryFormats.getAmountFormat(Locale.GERMANY);

System.out.println(germanFormat.format(monetaryAmount)); // 1.202,12 USD

Mais sobre o JSR 354

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.

Mais sobre a JEP 143

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)

Mais sobre a JEP 197

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.

Mais sobre a JEP 199

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)

Sem comentários:

Enviar um comentário