logo

Recursos do Java 8

A Oracle lançou uma nova versão do Java como Java 8 em 18 de março de 2014. Foi um lançamento revolucionário do Java para plataforma de desenvolvimento de software. Inclui várias atualizações para programação Java, JVM, ferramentas e bibliotecas.

Aprimoramentos na linguagem de programação Java 8

Java 8 fornece os seguintes recursos para programação Java:

  • Expressões lambda,
  • Referências de método,
  • Interfaces funcionais,
  • API de fluxo,
  • Métodos padrão,
  • Decodificação de codificação Base64,
  • Métodos estáticos na interface,
  • Aula opcional,
  • Classe de colecionadores,
  • Método ForEach(),
  • Motor JavaScript Rino,
  • Classificação de matriz paralela,
  • Digitar e repetir anotações,
  • Melhorias de IO,
  • Melhorias de simultaneidade,
  • Aprimoramentos JDBC etc.

Expressões Lambda

A expressão lambda nos ajuda a escrever nosso código em estilo funcional. Ele fornece uma maneira clara e concisa de implementar a interface SAM (Método Abstrato Único) usando uma expressão. É muito útil em bibliotecas de coleções, pois ajuda a iterar, filtrar e extrair dados.

Para mais informações e exemplos: Clique aqui


Referências de métodos

A referência do método Java 8 é usada para se referir ao método da interface funcional. É uma forma compacta e fácil de expressão lambda. Cada vez que usar a expressão lambda apenas para se referir a um método, você pode substituir sua expressão lambda pela referência de método.

Para mais informações e exemplos: Clique aqui


Interface Funcional

Uma interface que contém apenas um método abstrato é conhecida como interface funcional. Ele pode ter vários métodos padrão e estáticos. Também pode declarar métodos de classe de objeto.

As interfaces funcionais também são conhecidas como Interfaces de Método Abstrato Único (Interfaces SAM).

Para mais informações e exemplos: Clique aqui


Opcional

Java introduziu uma nova classe opcional em Java 8. É uma classe final pública usada para lidar com NullPointerException em aplicativos Java. Devemos importar java.util pacote para usar esta classe. Ele fornece métodos para verificar a presença de valor para uma variável específica.

Para mais informações e exemplos: Clique aqui


para cada

Java fornece um novo método forEach() para iterar os elementos. É definido nas interfaces Iterable e Stream.

É um método padrão definido na interface Iterable. As classes de coleção que estendem a interface Iterable podem usar o método forEach() para iterar elementos.

Este método usa um único parâmetro que é uma interface funcional. Portanto, você pode passar a expressão lambda como argumento.

Para mais informações e exemplos: Clique aqui


API de data/hora

Java introduziu uma nova API de data e hora desde Java 8. O pacote java.time contém classes de data e hora Java 8.

Para mais informações e exemplos: Clique aqui


Métodos padrão

Java fornece um recurso para criar métodos padrão dentro da interface. Os métodos definidos dentro da interface e marcados com a palavra-chave padrão são conhecidos como métodos padrão. Esses métodos são métodos não abstratos e podem ter corpo de método.

Para mais informações e exemplos: clique aqui


Motor JavaScript Rino

Nashorn é um mecanismo JavaScript. É usado para executar código JavaScript dinamicamente na JVM (Java Virtual Machine). Java fornece uma ferramenta de linha de comando etc. que é usado para executar código JavaScript.

Você pode executar o código JavaScript de duas maneiras:

  1. Usando a ferramenta de linha de comando jjs e
  2. Incorporando no código-fonte Java.

Para mais informações e exemplos: clique aqui


StringJoiner

Java adicionou uma nova classe final StringJoiner no pacote java.util. É usado para construir uma sequência de caracteres separados por um delimitador. Agora, você pode criar uma string passando delimitadores como vírgula(,), hífen(-) etc.

exemplos nfa

Para mais informações e exemplos: clique aqui


Colecionadores

Collectors é uma classe final que estende a classe Object. Ele fornece operações de redução, como acumular elementos em coleções, resumir elementos de acordo com vários critérios, etc.

Para mais informações e exemplos: Clique aqui


API de fluxo

O pacote Java 8 java.util.stream consiste em classes, interfaces e um enum para permitir operações de estilo funcional nos elementos. Ele executa computação lenta. Portanto, ele é executado apenas quando necessário.

Para mais informações e exemplos: Clique aqui


Filtro de fluxo

O fluxo Java fornece um método filter() para filtrar os elementos do fluxo com base em um determinado predicado. Suponha que você queira obter apenas elementos pares de sua lista. Você pode fazer isso facilmente com a ajuda do método filter().

Este método usa o predicado como argumento e retorna um fluxo de elementos resultantes.

Para mais informações e exemplos: Clique aqui


Codificação e decodificação Java Base64

Java fornece uma classe Base64 para lidar com criptografia e descriptografia. Você precisa importar a classe java.util.Base64 em seu arquivo de origem para usar seus métodos.

Esta classe fornece três codificadores e decodificadores diferentes para criptografar informações em cada nível.

Para mais informações e exemplos: Clique aqui


Classificação de array paralelo Java

Java fornece um novo recurso adicional na classe Arrays que é usado para classificar os elementos do array paralelamente. O método paraleloSort() foi adicionado à classe java.util.Arrays que usa o pool comum de paralelismo JSR 166 Fork/Join para fornecer classificação de matrizes. É um método sobrecarregado.

Para mais informações e exemplos: clique aqui


Aprimoramentos de segurança do Java 8

1) O provedor Java Secure Socket Extension (JSSE) habilita os protocolos Transport Layer Security (TLS) 1.1 e TLS 1.2 por padrão no lado do cliente.

2) Foi adicionado um método aprimorado AccessController.doPrivileged que permite ao código declarar um subconjunto de seus privilégios, sem impedir a passagem completa da pilha para verificar outras permissões.

3) Algoritmos Advanced Encryption Standard (AES) e Password-Based Encryption (PBE), como PBEWithSHA256AndAES_128 e PBEWithSHA512AndAES_256 foram adicionados ao provedor SunJCE.

4) Java Secure Socket Extension (SunJSSE) habilitou a extensão Server Name Indication (SNI) para aplicativos cliente por padrão no JDK 7 e o JDK 8 oferece suporte à extensão SNI para aplicativos de servidor. A extensão SNI é um recurso que estende os protocolos SSL/TLS para indicar a qual nome de servidor o cliente está tentando se conectar durante o handshake.

5) O SunJSSE foi aprimorado para suportar algoritmos de criptografia autenticada com dados associados (AEAD). O provedor Java Cryptography Extension (SunJCE) foi aprimorado para suportar a implementação de cifra AES/GCM/NoPadding, bem como parâmetros de algoritmo Galois/Counter Mode (GCM).

6) Um novo sinalizador de comando -importpassword é adicionado ao utilitário keytool. Ele é usado para aceitar uma senha e armazená-la com segurança como uma chave secreta. Classes como java.security.DomainLoadStoreParameter ejava.security.PKCS12Attribute são incluídas para suportar o tipo de armazenamento de chaves DKS.

7) No JDK 8, os algoritmos criptográficos foram aprimorados com a variante SHA-224 da família SHA-2 de implementações de resumo de mensagens.

8) Suporte aprimorado para criptografia NSA Suite B, que inclui:

  • Registro OID para algoritmos de criptografia NSA Suite B
  • Suporte para geração de pares de chaves DSA de 2.048 bits e algoritmos de assinatura adicionais para chaves DSA de 2.048 bits, como SHA224withDSA e SHA256withDSA.
  • Levantamento da restrição de tamanho de chave de 1024 para 2048 para o algoritmo Diffie-Hellman (DH).

9) A classe SecureRandom fornece a geração de números aleatórios criptograficamente fortes que são usados ​​para chaves privadas ou públicas, cifras e mensagens assinadas. O método getInstanceStrong() foi introduzido no JDK 8, que retorna uma instância do SecureRandom mais forte. Deve ser usado quando você precisar criar uma chave pública e privada RSA. SecureRandom inclui as seguintes outras alterações:

  • Duas novas implementações foram introduzidas para plataformas UNIX, que fornecem comportamento de bloqueio e não bloqueio.

10) Foi incluída uma nova classe PKIXRevocationChecker que verifica o status de revogação de certificados com o algoritmo PKIX. Ele suporta verificação de melhor esforço, verificação de certificado de entidade final e opções específicas de mecanismo.

11) O Public Key Cryptography Standards 11 (PKCS) foi expandido para incluir suporte de 64 bits para Windows.

12) Dois novos tipos de rcache foram adicionados ao Kerberos 5. Digite none significa nenhum rcache e digite dfl significa o rcache baseado em arquivo no estilo DFL. Além disso, a subchave solicitada pelo aceitante agora é suportada. Eles são configurados usando as propriedades do sistema sun.security.krb5.rcache e sun.security.krb5.acceptor.subkey.

13) No JDK 8, a transição do protocolo Kerberos 5 e a delegação restrita são suportadas no mesmo domínio.

14) Java 8 desativou a criptografia fraca por padrão. Os tipos de criptografia Kerberos 5 relacionados ao DES não são suportados por padrão. Esses tipos de criptografia podem ser ativados adicionando allow_weak_crypto=true no arquivo krb5.conf.

java char para string

15) Você pode definir o nome do servidor como nulo para indicar um servidor não vinculado. Isso significa que um cliente pode solicitar o serviço usando qualquer nome de servidor. Depois que um contexto for estabelecido, o servidor poderá recuperar o nome como uma propriedade negociada com o nome de chave SASL.BOUND_SERVER_NAME.

16) A ponte Java Native Interface (JNI) para Java Generic Security Service (JGSS) nativo agora é suportada no Mac OS X. Você pode definir a propriedade do sistema sun.security.jgss.native como true para ativá-la.

17) Uma nova propriedade do sistema, jdk.tls.ephemeralDHKeySize é definida para personalizar os tamanhos das chaves DH efêmeras. O tamanho mínimo aceitável da chave DH é 1.024 bits, exceto para conjuntos de criptografia exportáveis ​​ou modo legado (jdk.tls.ephemeralDHKeySize=legacy).

18) O provedor Java Secure Socket Extension (JSSE) respeita a preferência do conjunto de criptografia do cliente por padrão. No entanto, o comportamento pode ser alterado para respeitar a preferência do conjunto de criptografia do servidor chamando SSLParameters.setUseCipherSuitesOrder(true) no servidor.


Aprimoramentos nas ferramentas Java 8

1) É introduzido um comando jjs, que invoca o mecanismo Nashorn no modo shell interativo ou para interpretar arquivos de script.

2) O comando java é capaz de iniciar aplicativos JavaFX, desde que o aplicativo JavaFX esteja empacotado corretamente.

3) A página de manual do comando java (nroff e HTML) foi completamente reformulada. As opções avançadas agora estão divididas em Runtime, Compiler, Garbage Collection e Serviceability, de acordo com a área que afetam. Várias opções anteriormente ausentes são agora descritas. Há também uma seção para opções que foram obsoletas ou removidas desde a versão anterior.

4) A nova ferramenta de linha de comando jdeps permite que o desenvolvedor analise arquivos de classe para determinar dependências em nível de pacote ou de classe.

5) Você pode acessar comandos de diagnóstico remotamente, que antes eram acessíveis apenas localmente por meio da ferramenta jcmd. O acesso remoto é fornecido usando Java Management Extensions (JMX), portanto, os comandos de diagnóstico são expostos a um MBean da plataforma registrado no servidor MBean da plataforma. O MBean é a interface com.sun.management.DiagnosticCommandMBean.

6) Uma nova opção -tsapolicyid está incluída na ferramenta jarsigner que permite solicitar um carimbo de data/hora assinado de uma autoridade de carimbo de data/hora e anexá-lo a um arquivo JAR assinado.

7) Foi incluído um novo método java.lang.reflect.Executable.getParameters que permite acessar os nomes dos parâmetros formais de qualquer método ou construtor. No entanto, os arquivos .class não armazenam nomes formais de parâmetros por padrão. Para armazenar nomes formais de parâmetros em um arquivo .class específico e, assim, permitir que a API Reflection recupere nomes formais de parâmetros, compile o arquivo de origem com a opção -parameters do compilador javac.

8) As regras de tipo para comparações binárias na Seção 15.21 da Especificação da Linguagem Java (JLS) agora serão aplicadas corretamente pelo javac.

9) Nesta versão, a ferramenta apt e sua API associada contida no pacote com.sun.mirror foram removidas.

Aprimoramentos de Javadoc

No Java SE 8, as novas APIs a seguir foram adicionadas à ferramenta Javadoc.

  • Uma nova API DocTree introduz um scanner que permite percorrer o código-fonte representado por uma árvore de sintaxe abstrata. Isso estende a API Compiler Tree para fornecer acesso estruturado ao conteúdo dos comentários javadoc.
  • O pacote javax.tools contém classes e interfaces que permitem invocar a ferramenta Javadoc diretamente de um aplicativo Java, sem executar um novo processo.
  • A seção 'Resumo do Método' da documentação gerada de uma classe ou interface foi reestruturada. As descrições dos métodos nesta seção são agrupadas por tipo. Por padrão, todos os métodos são listados. Você pode clicar em uma guia para visualizar métodos de um tipo específico (estático, de instância, abstrato, concreto ou obsoleto, se existirem na classe ou interface).
  • A ferramenta javadoc agora tem suporte para verificar o conteúdo dos comentários do javadoc em busca de problemas que possam levar a diversos problemas, como HTML inválido ou problemas de acessibilidade, nos arquivos gerados pelo javadoc. O recurso está habilitado por padrão e também pode ser controlado pela nova opção -Xdoclint.

Melhorias no Pack200

O formato do arquivo de classe Java foi atualizado devido ao JSR 292, que oferece suporte a linguagens digitadas dinamicamente na plataforma Java.

O mecanismo Pack200 foi atualizado para garantir que os arquivos de classe Java SE 8 sejam compactados de forma eficaz. Agora, ele pode reconhecer entradas constantes de pool e novos bytecodes introduzidos pelo JSR 292. Como resultado, os arquivos compactados criados com esta versão da ferramenta pack200 não serão compatíveis com versões mais antigas da ferramenta unpack200.


Aprimoramentos de E/S Java 8

No Java 8, há várias melhorias nas implementações java.nio.charset.Charset e charset estendido. Inclui o seguinte:

  • Um novo SelectorProvider que pode melhorar o desempenho ou escalabilidade do servidor. O /dev/poll SelectorProvider continua a ser o padrão. Para usar o mecanismo de porta de eventos Solaris, execute com a propriedade do sistema java.nio.channels.spi.Selector configurada com o valor sun.nio.ch.EventPortSelectorProvider.
  • O tamanho do arquivo /jre/lib/charsets.jar foi reduzido.
  • O desempenho foi aprimorado para o construtor java.lang.String(byte[], ∗) e o método java.lang.String.getBytes().

Aprimoramentos de rede Java 8

1) Uma nova classe java.net.URLPermission foi adicionada. Representa uma permissão de acesso a um recurso definido por uma determinada URL.

2) Foi adicionado um pacote jdk.net que contém opções de soquete específicas da plataforma e um mecanismo para definir essas opções em todos os tipos de soquete padrão. As opções de soquete são definidas em jdk.net.ExtendedSocketOptions.

3) Na classe HttpURLConnection, se um gerenciador de segurança estiver instalado e se um método for chamado que resulte em uma tentativa de abrir uma conexão, o chamador deverá possuir um 'connect'SocketPermission para a combinação host/porta do URL de destino ou um URLPermission que permite esta solicitação.

Se o redirecionamento automático estiver ativado e essa solicitação for redirecionada para outro destino, o chamador também deverá ter permissão para se conectar ao host/URL redirecionado.


Aprimoramentos de simultaneidade Java 8

O pacote java.util.concurrent adicionou duas novas interfaces e quatro novas classes.

Interfaces Java.util.concurrent

Interface Descrição
interface estática pública CompletableFuture.AsynchronousCompletionTask É uma interface de marcador usada para identificar tarefas assíncronas produzidas por métodos assíncronos. Pode ser útil para monitorar, depurar e rastrear atividades assíncronas.
interface pública CompletionStage Ele cria um estágio de computação possivelmente assíncrona, que executa uma ação ou calcula um valor quando outro CompletionStage é concluído.

Classes Java.util.concurrent

Aula Descrição
classe pública CompletableFuture estende Object implementa Future, CompletionStage É um Futuro que pode ser explicitamente concluído e pode ser usado como um Estágio de Conclusão, suportando funções e ações dependentes que são acionadas após sua conclusão.
classe estática pública ConcurrentHashMap.KeySetView estende objeto implementa conjunto, serializável É uma visão de um ConcurrentHashMap como um conjunto de chaves, no qual as adições podem opcionalmente ser habilitadas mapeando para um valor comum.
classe abstrata pública CountedCompleter estende ForkJoinTask Um ForkJoinTask com uma ação de conclusão executada quando acionado e não há ações pendentes restantes.
classe pública CompletetionException estende RuntimeException Ele lança uma exceção quando um erro ou outra exceção é encontrada durante a conclusão de um resultado ou tarefa.

Novos métodos na classe java.util.concurrent.ConcurrentHashMap

A classe ConcurrentHashMap apresenta vários novos métodos em sua versão mais recente. Inclui vários métodos forEach (forEach, forEachKey, forEachValue e forEachEntry), métodos de pesquisa (search, searchKeys, searchValues ​​e searchEntries) e um grande número de métodos de redução (reduce, reduzToDouble, reduzToLong etc.). Outros métodos diversos (mappingCount e newKeySet) também foram adicionados.

Novas classes em java.util.concurrent.atomic

A versão mais recente introduz suporte variável escalável e atualizável por meio de um pequeno conjunto de novas classes DoubleAccumulator, DoubleAdder, LongAccumulator e LongAdder. Ele emprega internamente técnicas de redução de contenção que fornecem enormes melhorias de rendimento em comparação com variáveis ​​​​atômicas.

Aula Descrição
classe pública DoubleAccumulator estende Number implementa Serializable É usado para uma ou mais variáveis ​​que juntas mantêm um valor duplo em execução atualizado usando uma função fornecida.
classe pública DoubleAdder estende Number implementa Serializable É usado para uma ou mais variáveis ​​que juntas mantêm uma soma dupla inicialmente zero.
classe pública LongAccumulator estende Number implementa Serializable É usado para uma ou mais variáveis ​​que juntas mantêm um valor longo atualizado usando uma função fornecida.
classe pública LongAdder estende Number implementa Serializable É usado para uma ou mais variáveis ​​que juntas mantêm uma soma longa inicialmente zero.

Novos métodos na classe java.util.concurrent.ForkJoinPool

Esta classe adicionou dois novos métodos getCommonPoolParallelism() e commonPool(), que retornam o nível de paralelismo direcionado do pool comum ou da instância do pool comum, respectivamente.

Método Descrição
público estático ForkJoinPool commonPool() Ele retorna a instância do pool comum.
Público estático int getCommonPoolParallelism() Ele retorna o nível de paralelismo direcionado do pool comum.

Nova classe java.util.concurrent.locks.StampedLock

Uma nova classe StampedLock é adicionada e é usada para adicionar bloqueio baseado em capacidade com três modos para controlar o acesso de leitura/gravação (gravação, leitura e leitura otimista). Esta classe também oferece suporte a métodos que fornecem conversões condicionalmente nos três modos.

Aula Descrição
classe pública StampedLock estende objeto implementa serializável Esta classe representa um bloqueio baseado em capacidade com três modos para controlar o acesso de leitura/gravação.

Aprimoramentos da API Java para processamento XML (JAXP) 1.6

No Java 8, a API Java é adicionada para processamento XML (JAXP) 1.6. Requer o uso do recurso carregador do provedor de serviços que é definido por java.util.ServiceLoader para carregar serviços a partir de arquivos de configuração de serviço.

A justificativa para isso é permitir a modularização futura da plataforma Java SE, onde os provedores de serviços podem ser implementados por meios diferentes dos arquivos JAR e talvez sem os arquivos de configuração de serviço.


Aprimoramentos da máquina virtual Java

A verificação de instruções Invokespecial foi reforçada para que apenas um método de inicialização de instância na classe atual ou em sua superclasse direta possa ser invocado.


Java Mission Control 5.3 está incluído no Java 8

Java Mission Control (JMC) é um conjunto avançado de ferramentas que permite análise de dados eficiente e detalhada e oferece monitoramento e gerenciamento Java avançados e discretos. JMC fornece seções para áreas de análise comuns, como desempenho de código, memória e latência.

Os pacotes de idiomas Babel em japonês e chinês simplificado agora estão incluídos por padrão no Java Mission Control incluído no JDK 8.


Aprimoramentos de internacionalização do Java 8

1) Aprimoramentos Unicode

O JDK 8 inclui suporte para Unicode 6.2.0. Ele contém os seguintes recursos.

  • 733 novos caracteres, incluindo o sinal da Lira Turca.
  • 7 novos roteiros:
    • Hieróglifos Meroíticos
    • Cursiva Meroítica
    • Sora Sompeng
    • Chakma
    • Sharada
    • Takri
    • Miao
  • 11 novos blocos: incluindo 7 blocos para os novos scripts listados acima e 4 blocos para os seguintes scripts existentes:
  • Árabe Estendido-A
  • Suplemento Sudanês
  • Conhecendo extensões mansas
  • Símbolos Alfabéticos Matemáticos Árabes

Adoção de dados Unicode CLDR e da propriedade do sistema java.locale.providers

O Unicode Consortium lançou o projeto Common Locale Data Repository (CLDR) para 'suportar os idiomas do mundo, com o maior e mais extenso repositório padrão de dados de localidade disponível'. O CLDR está se tornando o padrão de fato para dados de localidade. Os dados de localidade baseados em XML do CLDR foram incorporados à versão JDK 8, porém estão desabilitados por padrão.

Existem quatro fontes distintas para dados de localidade:

  • CLDR representa os dados de localidade fornecidos pelo projeto Unicode CLDR.
  • HOST representa a personalização do usuário atual das configurações do sistema operacional subjacente. Ele funciona apenas com a localidade padrão do usuário e as configurações personalizáveis ​​podem variar dependendo do sistema operacional, mas principalmente os formatos de data, hora, número e moeda são suportados.
  • SPI representa os serviços sensíveis à localidade implementados nos provedores SPI instalados.
  • JRE representa os dados de localidade que são compatíveis com as versões anteriores do JRE.

Para selecionar a origem de dados de código de idioma desejada, use a propriedade de sistema java.locale.providers. listando as fontes de dados na ordem preferencial. Por exemplo: java.locale.providers=HOST,SPI,CLDR,JRE O comportamento padrão é equivalente à seguinte configuração: java.locale.providers=JRE,SPI


Novas APIs de calendário e localidade do Java 8

O JDK 8 inclui duas novas classes, vários métodos novos e um novo valor de retorno para um método estático existente.

Duas novas classes abstratas para provedores de serviços são adicionadas ao pacote java.util.spi.

Aula Descrição
classe abstrata pública CalendarDataProvider estende LocaleServiceProvider É uma classe abstrata para provedores de serviços que fornecem parâmetros de calendário dependentes de localidade.
classe abstrata pública CalendarNameProvider estende LocaleServiceProvider É uma classe abstrata para provedores de serviços que fornecem representações de strings localizadas (nomes de exibição) de valores de campos de calendário.

Um método estático agora é capaz de reconhecer Locale.UNICODE_LOCALE_EXTENSION para o sistema de numeração.

Método Descrição
público estático final DecimalFormatSymbols getInstance(Locale locale) É usado para obter a instância DecimalFormatSymbols para o código do idioma especificado. Este método fornece acesso a instâncias de DecimalFormatSymbols para localidades suportadas pelo próprio tempo de execução Java, bem como para aquelas suportadas por implementações DecimalFormatSymbolsProvider instaladas. Ele lança NullPointerException se o locale for nulo.

Adicionados novos métodos na API do calendário:

Método Descrição
booleano público isSupportedLocale (localidade local) Ele retorna verdadeiro se a localidade fornecida for suportada por este provedor de serviços de localidade. A localidade fornecida pode conter extensões que devem ser levadas em consideração para a determinação do suporte. É definido na classe java.util.spi.LocaleServiceProvider
String pública getCalendarType() Ele retorna o tipo de calendário deste Calendário. Os tipos de calendário são definidos pela especificação Unicode Locale Data Markup Language (LDML). É definido na classe java.util.Calendar.

Novos especificadores de estilo foram adicionados aos métodos Calendar.getDisplayName e Calendar.getDisplayNames para determinar o formato do nome do Calendário.


Especificador Descrição
int final estático público SHORT_FORMAT É um especificador de estilo para getDisplayName e getDisplayNames que indica um nome abreviado usado para formato.
público estático final int LONG_FORMAT É um especificador de estilo para getDisplayName e getDisplayNames que indica um nome longo usado para formato.
int final estático público SHORT_STANDALONE É um especificador de estilo para getDisplayName e getDisplayNames que indica um nome abreviado usado independentemente, como uma abreviatura de mês como cabeçalhos de calendário.
int final estático público LONG_STANDALONE É um especificador de estilo para getDisplayName e getDisplayNames que indica um nome longo usado independentemente, como o nome de um mês como cabeçalhos de calendário.

Dois novos métodos Locale para lidar com extensões (opcionais) de uma localidade.

Método Descrição
hasExtensions booleanos públicos() Ele retorna verdadeiro se este local tiver alguma extensão.
locale público stripExtensions() Ele retorna uma cópia deste Locale sem extensões. Se este Locale não tiver extensões, este Locale será retornado.

Dois novos métodos Locale.filter retornam uma lista de instâncias Locale que correspondem aos critérios especificados, conforme definido na RFC 4647:

Método Descrição
filtro de lista estática pública (Lista de prioridades, localidades de coleção) Ele retorna uma lista de instâncias de Locale correspondentes usando o mecanismo de filtragem definido em RFC 4647. Isso é equivalente a filter(List, Collection, FilteringMode) quando o modo é Locale.FilteringMode.AUTOSELECT_FILTERING.
filtro de lista estática pública (lista de prioridades, localidades de coleção, modo Locale.FilteringMode) Ele retorna uma lista de instâncias de Locale correspondentes usando o mecanismo de filtragem definido na RFC 4647.

Dois novos métodos Locale.filterTags retornam uma lista de tags de idioma que correspondem aos critérios especificados, conforme definido na RFC 4647.

Método Descrição
public static List filterTags (lista de prioridades, tags de coleção) Ele retorna uma lista de tags de idiomas correspondentes usando o mecanismo de filtragem básico definido em RFC 4647. Isso é equivalente a filterTags(List, Collection, FilteringMode) quando o modo é Locale.FilteringMode.AUTOSELECT_FILTERING.
public static List filterTags (lista de prioridades, tags de coleção, modo Locale.FilteringMode) Ele retorna uma lista de tags de idiomas correspondentes usando o mecanismo básico de filtragem definido na RFC 4647.

Dois novos métodos de pesquisa retornam a tag de localidade ou idioma mais adequada usando o mecanismo de pesquisa definido na RFC 4647.

Método Descrição
pesquisa de localidade estática pública (lista de prioridades, localidades de coleção) Ele retorna uma instância Locale para a tag de idioma mais adequada usando o mecanismo de pesquisa definido na RFC 4647.
LookupTag de string estática pública (lista de prioridades, tags de coleção) Ele retorna a tag de idioma mais adequada usando o mecanismo de pesquisa definido na RFC 4647.

Outras melhorias da versão Java 8

Melhorias no JDK 8u5

1) A frequência com que os prompts de segurança são mostrados para um aplicativo foi reduzida.

caractere para int em java

Melhorias no JDK 8u11

1) Uma opção para suprimir ofertas de patrocinadores quando o JRE é instalado ou atualizado está disponível na guia Avançado do Painel de Controle Java.

2) O atributo Entry-Point pode ser incluído no manifesto do arquivo JAR para identificar uma ou mais classes como um ponto de entrada válido para seu RIA (aplicativo Rich Internet).


Melhorias no JDK 8u20

1) A ferramenta javafxpackager foi renomeada para javapackager. Esta ferramenta foi aprimorada com novos argumentos para empacotadores de aplicativos independentes.

As melhorias a seguir estão relacionadas à ferramenta java:

  • Uma opção experimental do compilador JIT relacionada à memória transacional restrita (RTM) foi adicionada.
  • Várias opções relacionadas à desduplicação de strings foram adicionadas.
  • Várias opções relacionadas aos intrínsecos do Advanced Encryption Standard (AES) foram adicionadas.
  • As combinações de opções de coleta de lixo foram descontinuadas.

2) O Guia de ajuste de coleta de lixo foi adicionado à Java HotSpot Virtual Machine. Ele descreve os coletores de lixo incluídos no Java HotSpot VM e ajuda você a decidir qual coletor de lixo pode otimizar melhor o desempenho do seu aplicativo, especialmente se ele manipular grandes quantidades de dados (vários gigabytes), tiver muitos threads e tiver altas taxas de transação .


Melhorias no JDK 8u31

1) Nesta versão, o protocolo SSLv3 foi removido das opções avançadas do Painel de controle Java.


Melhorias no JDK 8u40

Ferramenta Java

1) O -XX:+CheckEndorsedAndExtDirs foi adicionado porque o mecanismo de substituição de padrões endossados ​​(JDK-8065675) e o mecanismo de extensão (JDK-8065702) foram descontinuados. A opção ajuda a identificar quaisquer usos existentes desses mecanismos e é suportada no JDK 7u80 e no JDK 8u40.

2) Java Flight Recorder (JFR) oferece uma variedade de maneiras de desbloquear recursos comerciais e habilitar o JFR durante o tempo de execução de um aplicativo.

Inclui opções de linha de comando java, como comandos de diagnóstico jcmd e controles de interface gráfica do usuário (GUI) no Java Mission Control. Essa flexibilidade permite fornecer as opções apropriadas na inicialização ou interagir com o JFR posteriormente.

3) A opção -XX:StartFlightRecording=parameter=value possui um novo parâmetro, dumponexit=true, que especifica se um arquivo de dump de dados JFR deve ser gerado quando a JVM termina de maneira controlada.

4) As opções relacionadas à Memória Transacional Restrita (RTM) não são mais experimentais. Essas opções incluem -XX:RTMAbortRatio=abort_ratio, -XX:RTMRetryCount=number_of_retries, -XX:+UseRTMDeopt e -XX:+UseRTMLocking.

5) No Java 8, o Application Class Data Sharing (AppCDS) foi introduzido. AppCDS estende CDS (Class Data Sharing) para permitir que classes dos diretórios de extensões padrão e o caminho de classe do aplicativo sejam colocados no arquivo compartilhado. Este é um recurso comercial e não é mais considerado experimental.

6) Novas opções -XX:+ResourceManagement e -XX:ResourceManagementSampleInterval=value foram adicionadas.

7) Foram adicionadas informações adicionais sobre páginas grandes. Páginas grandes, também conhecidas como páginas enormes, são páginas de memória significativamente maiores que o tamanho padrão da página de memória. Páginas grandes otimizam os buffers de visualização de tradução do processador. As opções do Linux -XX:+UseHugeTLBFS, -XX:+UseSHM e -XX:+UseTransparentHugePages foram documentadas.

8) A opção -XX:ObjectAlignmentInBytes=alignment foi documentada.

Ferramenta JJS

1) A opção --optimistic-types=[true|false] foi adicionada. Ele habilita ou desabilita suposições de tipo otimista com recompilação desotimizante.

2) A opção --linguagem=[es5] foi adicionada à ferramenta jjs. Especifica a versão da linguagem ECMAScript.

Ferramenta Javapackager

1) Novos argumentos estão disponíveis para empacotadores do OS X. O argumento mac.CFBundleVersion identifica o número da versão interna a ser usada.

2) O argumento mac.dmg.simple indica se as etapas de personalização do DMG que dependem da execução do código AppleScript foram ignoradas.

Ferramenta Jcmd

A ferramenta Jcmd é usada para interagir dinamicamente com Java Flight Recorder (JFR). Você pode usá-lo para desbloquear recursos comerciais, ativar/iniciar/parar gravações de voos e obter várias mensagens de status do sistema.

Ferramenta Jstat

A ferramenta jstat foi atualizada com informações sobre o espaço de classe compactado, que é uma parte especial do metaespaço.

Máquina virtual

O recurso Scalable Native Memory Tracking HotSpot VM ajuda a diagnosticar vazamentos de memória da VM e esclarecer os usuários quando os vazamentos de memória não estão na VM. O Native Memory Tracker pode ser executado sem desligamento automático em sistemas grandes e sem causar um impacto significativo no desempenho além do que é considerado aceitável para programas pequenos.