terça-feira, 15 de julho de 2014

O que há de novo no Java 8?

No passado mês de Março de 2014 foi lançada o Java SE 8. Trata-se de uma forte actualização de características e funcionalidades da plataforma Java SE, implementada pela Oracle.

Neste artigo, vamos resumir algumas das novas características e funcionalidades do Java SE 8 e do JDK 8.

Os componentes mais actualizados da plataforma Java SE, podem ser obtidos a partir de download do site da Oracle, aqui.

Linguagem Java

  • Lambda Expressions. Um novo recurso da linguagem que foi introduzido nesta versão. Elas permitem tratar uma funcionalidade como um parâmetro de um método ou código como dados. As expressões lambda permitem expressar instâncias de interfaces de método único (referidos como interfaces funcionais) de forma mais compacta.

  • Method References. Fornecem expressões lambda fáceis de ler para os métodos que já têm nome.

  • Default Methods. Permitem que novas funcionalidades sejam adicionadas a interfaces de bibliotecas e asseguram a compatibilidade binária com o código escrito para versões mais antigas desses interfaces.

  • Repeating Annotations. Fornecem a possibilidade de aplicar o mesmo tipo de anotação mais de uma vez para a mesma declaração ou tipo em uso.

  • Type Annotations. Fornecem a possibilidade de aplicar uma anotação em qualquer lugar onde um tipo é usado e não apenas numa declaração. Usado com um sistema plugin de tipos, esta característica permite uma melhor verificação de tipos, no código.

  • Melhoria da inferência de tipos.

  • Reflexão de parâmetros de métodos.

Colecções

  • As classes no novo package java.util.stream fornecer uma Stream API para suportar as operações de estilo funcional em streams de elementos. A Stream API é integrada na Collections API, o que permite operações em bulk em colecções, como transformações sequenciais ou paralelas com mapeamento reduzido.

  • Melhoria de Desempenho para HashMap com Key Collisions.

Plataforma Java SE

  • Compact Profiles. Contêm subconjuntos predefinidos da plataforma Java SE e permitem que aplicações que não necessitam de toda a plataforma sejam instaladas e executado em dispositivos pequenos.

Segurança

  • TLS 1.2 ativado por por defeito, no lado do cliente.
  • Nova variante do AccessController.doPrivileged que permite ao código validar um subconjunto de seus privilégios, sem impedir a pesquisa completa da stack, para verificar se há outras permissões.
  • Algoritmos mais fortes para criptografia baseada em password.
  • Suporte para extensão SSL/TLS Server Name Indication (SNI) em servidores JSSE.
  • Suporte para algoritmos AEAD: O provider SunJCE foi melhorado, para suportar implementação de cifras AES / GCM / NoPadding, bem como parâmetros do algoritmo GCM. E o provider  SunJSSE foi melhorado para suportar conjuntos de codificação modo AEAD base.
  • Melhorias no KeyStore, incluindo o novo tipo de Domain KeyStore java.security.DomainLoadStoreParameter e a nova opção de comando -importpassword para o utilitário keytool.
  • Resumos de mensagens SHA-224.
  • Melhoria do suporte para NSA Suite B Cryptography.
  • Melhoria do suporte para High Entropy Random Number Generation.
  • Nova classe java.security.cert.PKIXRevocationChecker para configurar a verificação de revogação de certificados X.509.
  • PKCS11 de 64 bits para Windows.
  • Novos tipos rcache em Kerberos 5 Replay Caching.
  • Suporte para Kerberos 5 Protocol Transition e Constrained Delegation.
  • Tipos Kerberos 5 weak encryption desabilitados por defeito.
  • Unbound SASL para o mecanismo GSS-API/Kerberos 5.
  • Serviço SASL para nomes de host múltiplos.
  • Bridge de JNI para JGSS nativo no Mac OS X.
  • Suporte para chaves DH Efémeras mais fortes no provider SunJSSE.
  • Suporte para personalização de preferência de conjuntos de codificação server-side em JSSE.

JavaFX

  • O novo tema Modena foi implementado nesta versão. Para mais informações, consultar o blog fxexperience.com.
  • A nova classe SwingNode permite aos programadores incorporar conteúdos Swing em aplicações JavaFX. Ver a documentação da classe SwingNode e Embedding Swing Content in JavaFX Applications.
  • Os novos controlos de UI incluem o DatePicker e o TreeTableView.
  • O package javafx.print fornece as classes públicas para a JavaFX Printing API. Ver a documentação para mais informações.
  • As funcionalidades de Gráficos 3D incluem agora formas 3D, câmara, luzes, sub-cenas, materiais, pesquisa e suavização. As novas classes de API: Shape3D (subclasses Box, Cylinder, MeshView e Sphere), SubScene, Material, PickResult, LightBase (subclasses AmbientLight e PointLight) e SceneAntialiasing, foram adicionados à biblioteca de gráficos 3D do JavaFX. A classe API Camera também foi atualizada nesta versão. Ver a documentação de cada uma das classes anteriores e Getting Started with JavaFX 3D Graphics.
  • A classe WebView oferece novas funcionalidades e melhorias. Rever Supported Features of HTML5, para obter mais informações sobre recursos adicionais de HTML5, incluindo Web Sockets, Web Workers e Web Fonts
  • Suporte de texto melhorado, incluindo texto bi-direcional e scripts de texto complexos, tais como Tailandês ou Hindu, nos controlos, e nós de texto multi-linha, texto multi-estilo.
  • Suporte para monitores Hi-DPI.
  • As classes CSS Styleable tornaram-se uma API pública. Ver a documentação javafx.css para mais informações.
  • A nova classe ScheduledService permite reiniciar automaticamente o serviço.
  • O JavaFX está agora disponível para plataformas ARM. O JDK para ARM inclui a base, gráficos e controlos que compõem o JavaFX.

Ferramentas

  • É fornecido o comando jjs para chamar o motor Nashorn.
  • O comando java lança aplicações JavaFX.
  • A página java man foi reformulada.
  • A ferramenta de linha de comandos jdeps é fornecida para analisar ficheiros de classes.
  • O Java Management Extensions (JMX) fornece acesso remoto a comandos de diagnóstico.
  • A ferramenta jarsigner tem uma opção para solicitar um signed time stamp a uma autoridade de tempo (TSA).
  • Ferramenta javac
    • A opção –parameters do comando javac pode ser usada para armazenar nomes formais de parâmetros e ativar a Reflection API para disponibilizar os nomes formais de parâmetros.
    • As regras de tipo para operadores de igualdade na Java Language Specification (JLS) Seção 15.21 agora são correctamente aplicadas pelo comando javac.
    • A ferramenta javac tem agora suporte para verificar o conteúdo de comentários javadoc que poderiam levar a vários problemas, como HTML inválido, ou questões de acessibilidade, nos ficheiros que são gerados quando o javadoc é executado. A funcionalidade é ativada pela nova opção -Xdoclint. Para mais detalhes, ver o output da execução do comando javac -X. Esta funcionalidade também está disponível na ferramenta javadoc e está activa por defeito.
    • A ferramenta javac agora proporciona a capacidade de gerar cabeçalhos nativos, conforme o necessário. Isto elimina a necessidade de executar a ferramenta javah como um passo separado no pipeline de build. A funcionalidade é ativada no javac usando a nova opção -h, que é usada para especificar o diretório onde os ficheiros de cabeçalho devem ser escritos. Serão gerados ficheiros de cabeçalho para qualquer classe que tenha ou métodos nativos, ou campos constantes anotados com uma nova anotação do tipo java.lang.annotation.Native.
  • Ferramenta javadoc
    • A ferramenta javadoc suporta a nova DocTree API, que permite tratar comentários Javadoc como árvores de sintaxe abstractas.
    • A ferramenta javadoc suporta a nova Javadoc Access API, que permite invocar a ferramenta javadoc diretamente de uma aplicação Java, sem executar um novo processo. Ver a página javadoc what's new, mais informações.
    • A ferramenta javadoc tem agora suporte para verificar o conteúdo de comentários javadoc que poderiam levar a vários problemas, como HTML inválido, ou questões de acessibilidade, nos ficheiros que são gerados quando o javadoc é executado. Esta funcionalidade está activa por defeito e também pode ser controlado pela nova opção -Xdoclint. Para mais detalhes, ver o output da execução do comando javadoc -X. Esta funcionalidade também está disponível na ferramenta javac, embora não esteja activa por defeito.

Internacionalização

  • Melhorias no Unicode, incluindo suporte para Unicode 6.2.0.
  • Adoção de Unicode CLDR Data e propriedades de sistema do tipo java.locale.providers.
  • Novo Calendário e APIs Localizadas.
  • Possibilidade de instalar um Custom Resource Bundle como uma extensão.

Implementação

  • Para applets sandbox e aplicações Java Web Start, o URLPermission é agora usado para permitir ligações de volta ao servidor a partir do qual foram iniciadas. SocketPermission já não é permitido.
  • O atributo Permissions é exigido no manifesto dos ficheiros JAR ou no ficheiro JAR principal, em todos os níveis de segurança.

Package Date-Time

  • Um novo conjunto de packages, que fornecem um modelo abrangente de data e hora.

Scripting

Pack200

  • Suporte Pack200 para Constant Pool Entries e New Bytecodes Introduzidas pela JSR 292.
  • Suporte JDK8 para alterações de ficheiros de classes, especificadas pela JSR-292, JSR-308 e JSR-335.

IO e NIO

  • Nova implementação de SelectorProvider para Solaris com base no mecanismo Solaris Event Port. Para utilizar, executar com a propriedade de sistema java.nio.channels.spi.Selector definida com o valor sun.nio.ch.EventPortSelectorProvider.
  • Diminuição do tamanho do ficheiro <JDK_HOME>/jre/lib/charsets.jar.
  • Melhoria da performance para o construtor java.lang.String(byte[],*) e para o método java.lang.String.getBytes().

Packages java.lang e java.util

  • Ordenação paralela de arrays.
  • Encoding e Decoding Base64 syandard.
  • Suporte para aritmética Unsigned.

JDBC

Java DB

  • O JDK8 inclui o Java DB 10.10.

Redes

  • Foi adicionada a classe java.net.URLPermission.
  • Na classe java.net.HttpURLConnection, se estiver instalado um gestor de segurança, chamadas que peçam para abrir uma conexão requerem permissão.

Concorrência

  • No package java.util.concurrent foram adicionadas novas classes e interfaces.
  • Na classe java.util.concurrent.ConcurrentHashMap, foram adicionados métodos para suportar operações de agregação baseadas na nova funcionalidade de streams e expressões lambda.
  • No package java.util.concurrent.atomic foram adicionadas novas classes para variáveis ​​actualizáveis ​​escaláveis.
  • Na classe java.util.concurrent.ForkJoinPool, foram adicionados métodos para suportar uma pool comum.
  • Foi adicionada a classe java.util.concurrent.locks.StampedLock, para proporcionar um bloqueio à base de capacidade com três modos para controlar o acesso de leitura/escrita.

HotSpot

  • Controladores intrínsecos de hardware foram adicionados para usar Advanced Encryption Standard (AES). As flags UseAES e UseAESIntrinsics estão disponíveis para o uso de intrínsecos AES, baseados em hardware para Intel. O hardware deve ser 2010 ou Westmere mais recente. Por exemplo, para habilitar AES por hardware, usar as seguintes flags:
    -XX:+UseAES -XX:+UseAESIntrinsics
    E para desabilitar:
    -XX:-UseAES -XX:-UseAESIntrinsics
  • Remoção do PermGem.
  • Os Default Methods na Linguagem de Programação Java são suportados pelas instruções de bytecode para invocação de método.

Outros

Tradução livre das Release Notes “What's New in JDK 8”, da Oracle.

Sem comentários:

Enviar um comentário