Nuevas funciones de Java 10

Este artículo es parte de una serie: • Java 10 LocalVariable Type-Inference

• Mejoras en el rendimiento de Java 10

• Nuevas funciones de Java 10 (artículo actual)

1. Introducción

JDK 10, que es una implementación de Java SE 10, se lanzó el 20 de marzo de 2018.

En este artículo, cubriremos y exploraremos las nuevas funciones y cambios introducidos en JDK 10.

2. Inferencia de tipo de variable local

Siga el enlace para obtener un artículo detallado sobre esta función:

Inferencia de tipo de variable local de Java 10

3. Cobros no modificables

Hay un par de cambios relacionados con las colecciones no modificables en Java 10.

3.1. copia de()

java.util.List , java.util.Map y java.util.Set obtuvieron un nuevo método estático copyOf (Collection) .

Devuelve la copia no modificable de la Colección dada :

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

Cualquier intento de modificar dicha colección resultaría en una excepción de tiempo de ejecución java.lang.UnsupportedOperationException .

3.2. toUnmodificable * ()

java.util.stream.Collectors obtiene métodos adicionales para recopilar una secuencia en una lista , mapa o conjunto no modificable :

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

Cualquier intento de modificar dicha colección resultaría en una excepción de tiempo de ejecución java.lang.UnsupportedOperationException .

4. Opcional * .orElseThrow ()

java.util.Optional , java.util.OptionalDouble , java.util.OptionalInt y java.util.OptionalLong obtuvieron cada uno un nuevo método oElseThrow () que no toma ningún argumento y arroja NoSuchElementException si no hay ningún valor presente:

@Test public void whenListContainsInteger_OrElseThrowReturnsInteger() { Integer firstEven = someIntList.stream() .filter(i -> i % 2 == 0) .findFirst() .orElseThrow(); is(firstEven).equals(Integer.valueOf(2)); }

Es sinónimo y ahora es la alternativa preferida al método get () existente .

5. Mejoras en el desempeño

Siga el enlace para obtener un artículo detallado sobre esta función:

Mejoras de rendimiento de Java 10

6. Concienciación sobre contenedores

Las JVM ahora son conscientes de que se ejecutan en un contenedor Docker y extraerán la configuración específica del contenedor en lugar de consultar el sistema operativo en sí; se aplica a datos como la cantidad de CPU y la memoria total que se han asignado al contenedor.

Sin embargo, este soporte solo está disponible para plataformas basadas en Linux. Este nuevo soporte está habilitado de forma predeterminada y se puede deshabilitar en la línea de comandos con la opción JVM:

-XX:-UseContainerSupport

Además, este cambio agrega una opción de JVM que brinda la capacidad de especificar la cantidad de CPU que utilizará la JVM:

-XX:ActiveProcessorCount=count

Además, se han agregado tres nuevas opciones de JVM para permitir a los usuarios del contenedor Docker obtener un control más detallado sobre la cantidad de memoria del sistema que se utilizará para Java Heap:

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

7. Certificados raíz

El almacén de claves cacerts, que inicialmente estaba vacío hasta ahora, está destinado a contener un conjunto de certificados raíz que se pueden utilizar para establecer la confianza en las cadenas de certificados utilizadas por varios protocolos de seguridad.

Como resultado, los componentes de seguridad críticos, como TLS, no funcionaban de forma predeterminada en las compilaciones de OpenJDK.

Con Java 10, Oracle ha abierto los certificados raíz en el programa Java SE Root CA de Oracle para hacer que las compilaciones de OpenJDK sean más atractivas para los desarrolladores y reducir las diferencias entre esas compilaciones y las compilaciones de Oracle JDK.

8. Desaprovechamientos y eliminaciones

8.1. Opciones y herramientas de la línea de comandos

La herramienta javah se eliminó de Java 10, que generaba encabezados C y archivos fuente que eran necesarios para implementar métodos nativos; ahora, se puede usar javac -h en su lugar.

policytool era la herramienta basada en la interfaz de usuario para la creación y gestión de archivos de políticas. Esto ahora se ha eliminado. El usuario puede utilizar un editor de texto simple para realizar esta operación.

Se eliminó la opción java -Xprof . La opción se utilizó para perfilar el programa en ejecución y enviar datos de perfilado a la salida estándar. El usuario ahora debería usar la herramienta jmap en su lugar.

8.2. API

El paquete java.security.acl obsoleto se ha marcado como Removal = true y está sujeto a eliminación en una versión futura de Java SE. Ha sido reemplazado por java.security.Policy y clases relacionadas.

De manera similar, las API java.security. {Certificate, Identity, IdentityScope, Signer} están marcadas como Removal = true .

9. Versiones de versiones basadas en el tiempo

Starting with Java 10, Oracle has moved to the time-based release of Java. This has following implications:

  1. A new Java release every six months. The March 2018 release is JDK 10, the September 2018 release is JDK 11, and so forth. These are called feature releases and are expected to contain at least one or two significant features
  2. Support for the feature release will last only for six months, i.e., until next feature release
  3. Long-term support release will be marked as LTS. Support for such release will be for three years
  4. Java 11 will be an LTS release

java -version will now contain the GA date, making it easier to identify how old the release is:

$ 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. Conclusion

In this article, we saw the new features and changes brought in by Java 10.

Como de costumbre, los fragmentos de código se pueden encontrar en GitHub.

« Mejoras de rendimiento anteriores de Java 10