Guia para Java 10

Guia para Java 10

*1. Introdução *

JDK 10, que é uma implementação do Java SE 10, foi lançado em 20 de março de 2018.

Neste artigo, abordaremos e exploraremos os novos recursos e alterações introduzidos no JDK 10.

===* 2. Inferência de tipo de variável local *

Siga o link para um artigo detalhado sobre esse recurso:

link:/java-10-local-variável-tipo-inferência [Java 10 Local Variable Type Inference]

===* 3. Coleções não modificáveis ​​ *

Há algumas mudanças relacionadas a coleções não modificáveis ​​no Java 10.

3.1. cópia de()

java.util.List, java.util.Map e java.util.Set each obtiveram um novo método estático _copyOf (Collection) _.

Retorna a cópia inalterável do _Collection: _

@Test(expected = UnsupportedOperationException.class)
public void whenModifyCopyOfList_thenThrowsException() {
    List<Integer> copyList = List.copyOf(someIntList);
    copyList.add(4);
}

Qualquer tentativa de modificar essa coleção resultaria na exceção java.lang.UnsupportedOperationExceptionruntime.

3.2. _paramodificável* () _

java.util.stream.Collectors get métodos adicionais para coletar um Stream em List não modificável, Map ou Set:

@Test(expected = UnsupportedOperationException.class)
public void whenModifyToUnmodifiableList_thenThrowsException() {
    List<Integer> evenList = someIntList.stream()
      .filter(i -> i % 2 == 0)
      .collect(Collectors.toUnmodifiableList());
    evenList.add(4);
}

Qualquer tentativa de modificar essa coleção resultaria na exceção java.lang.UnsupportedOperationExceptionruntime.

4. _Opcional *.ouElseThrow () _

java.util.Optional, java.util.OptionalDouble, java.util.OptionalIntand java.util.OptionalLongeach obteve um novo método orElseThrow () que não aceita nenhum argumento e lança NoSuchElementExceptionse nenhum valor estiver presente:

@Test
public void whenListContainsInteger_OrElseThrowReturnsInteger() {
    Integer firstEven = someIntList.stream()
      .filter(i -> i % 2 == 0)
      .findFirst()
      .orElseThrow();
    is(firstEven).equals(Integer.valueOf(2));
}
*É sinônimo e agora é a alternativa preferida ao método __get () __ existente.*

*5. Melhorias de desempenho *

Siga o link para um artigo detalhado sobre esse recurso:

link:/java-10-performance-improvement [Java 10 Performance Improvements]

===* 6. Reconhecimento de contêineres *

  • As JVMs agora sabem que são executadas em um contêiner do Docker * e extraem a configuração específica do contêiner em vez de consultar o próprio sistema operacional - ele se aplica a dados como o número de CPUs e a memória total que foram alocados ao contêiner.

No entanto, esse suporte está disponível apenas para plataformas baseadas em Linux. Este novo suporte é ativado por padrão e pode ser desativado na linha de comandos com a opção JVM:

-XX:-UseContainerSupport

Além disso, essa alteração inclui uma opção da JVM que fornece a capacidade de especificar o número de CPUs que a JVM usará:

-XX:ActiveProcessorCount=count

Além disso, três novas opções de JVM foram incluídas para permitir que os usuários do contêiner do Docker obtenham um controle mais refinado da quantidade de memória do sistema que será usada para o Java Heap:

-XX:InitialRAMPercentage
-XX:MaxRAMPercentage
-XX:MinRAMPercentage

7. Certificados raiz

O keystore cacerts, que estava inicialmente vazio até agora, deve conter um conjunto de certificados raiz que podem ser usados ​​para estabelecer confiança nas cadeias de certificados usadas por vários protocolos de segurança.

Como resultado, componentes críticos de segurança como TLS não funcionaram por padrão nas construções do OpenJDK.

  • Com o Java 10, a Oracle forneceu os certificados raiz de origem *no programa Java SE Root CA da Oracle para tornar as compilações do OpenJDK mais atrativas para os desenvolvedores e reduzir as diferenças entre essas compilações e as compilações do Oracle JDK.

===* 8. Reprovações e remoções *

8.1. Opções e ferramentas de linha de comando*

A ferramenta javah foi removida do Java 10, que gerou cabeçalhos C e arquivos de origem necessários para implementar métodos nativos - agora, javac -h pode ser usado.

policytool era a ferramenta baseada na interface do usuário para criação e gerenciamento de arquivos de políticas. Agora isso foi removido. O usuário pode usar um editor de texto simples para executar esta operação.

Java -Xprofoption removida. A opção foi usada para criar perfil do programa em execução e enviar dados de criação de perfil para a saída padrão. O usuário agora deve usar a ferramenta jmap .

8.2. APIs *

O pacote java.security.acl descontinuado foi marcado paraRemoval = true e está sujeito a remoção em uma versão futura do Java SE. Foi substituído por java.security.Policy e classes relacionadas.

Da mesma forma, as APIs java.security. \ {Certificate, Identity, IdentityScope, Signer} estão marcadas como forRemoval = true.

===* 9. Versão com liberação baseada em tempo *

A partir do Java 10, a Oracle mudou para o release baseado em tempo do Java. Isso tem as seguintes implicações:

* O suporte para o lançamento do recurso durará apenas seis meses *, ou seja, até o próximo lançamento do recurso
  1. A liberação do suporte a longo prazo será marcada como LTS. O suporte para essa liberação será por três anos

  2. Java 11 será uma versão LTS

    *__ java -version __ agora conterá a data do GA* , facilitando a identificação da idade da versão:
$ java -version
openjdk version "10" 2018-03-20
OpenJDK Runtime Environment 18.3 (build 10+46)
OpenJDK 64-Bit Server VM 18.3 (build 10+46, mixed mode)

10. Conclusão

Neste artigo, vimos os novos recursos e alterações trazidos pelo Java 10.

Como sempre, trechos de código podem ser encontrados over no GitHub.