DEL 8 AL 17 CARACTERISTICAS DE JAVA QUE DEBES CONOCER

Cuál es la última versión de Java?

En marzo de 2021, Java 16 Fue la última versión de Java publicada, la sucede java 17 lanzada el 14 de septiembre

¿Qué versión de Java debo utilizar?

Las versiones más nuevas de Java ahora se publican cada 6 meses. Por lo tanto, Java 17 está programado para septiembre de 2021, Java 18 para Marc 2022 y así sucesivamente. En el pasado, los ciclos de lanzamiento de Java eran mucho más largos , hasta 3-5 años. Este gráfico demuestra que:

javaversions 4

Con tantas versiones nuevas que están saliendo, existen básicamente estos escenarios de uso del mundo real (™):

  • Los proyectos heredados en las empresas a menudo se quedan atascados con el uso de Java 8 (consulte ¿Por qué las empresas todavía están atascadas con Java 8? ). Por lo tanto, también se verá obligado a usar Java 8.
  • Algunos proyectos heredados incluso están bloqueados en Java 1.5 (lanzado en 2004) o 1.6 (lanzado en 2006). ¡Lo siento, amigos!
  • Si se está asegurando de utilizar los últimos IDE, marcos y herramientas de compilación y está iniciando un proyecto nuevo, puede, sin dudarlo, utilizar Java 11 (LTS) o incluso la última versión de Java 16.
  • Existe el campo especial del desarrollo de Android, donde la versión de Java está básicamente atascada en Java 7, con un conjunto específico de funciones de Java 8 disponibles. O cambia a usar el lenguaje de programación Kotlin.

¿Por qué las empresas siguen estancadas con Java 8?

Hay una combinación de diferentes razones por las que las empresas todavía están estancadas con Java 8. Para nombrar algunas:

  • Las herramientas de compilación (Maven, Gradle, etc.) y algunas bibliotecas inicialmente tenían errores con las versiones de Java> 8 y necesitaban actualizaciones. Incluso hoy en día, por ejemplo, con Java> = 9, ciertas herramientas de compilación imprimen advertencias de “acceso reflectante” al compilar proyectos de Java, que simplemente “no parece estar listo”, aunque las compilaciones estén bien.
  • Hasta Java 8, utilizabas prácticamente las compilaciones JDK de Oracle y no tenías que preocuparte por las licencias. Sin embargo, Oracle cambió el esquema de licencias en 2019 , lo que hizo que Internet se volviera loco con una tonelada de artículos que decían “Java ya no es gratis”, y siguió una gran cantidad de confusión. Sin embargo, esto no es realmente un problema, del cual aprenderá en la sección Distribuciones de Java de esta guía.
  • Algunas empresas tienen políticas para usar solo versiones LTS y confían en sus proveedores de sistemas operativos para que les proporcionen estas compilaciones, lo que lleva tiempo.

En resumen: tiene una combinación de problemas prácticos (actualización de sus herramientas, bibliotecas, marcos) y problemas políticos.

¿Por qué algunas versiones de Java, como la 8, también se llaman 1.8?

Las versiones de Java anteriores a la 9 simplemente tenían un esquema de nomenclatura diferente. Entonces, Java 8 también se puede llamar 1.8 , Java 5 se puede llamar 1.5, etc. Cuando emitió el comando ‘java -version’, con estas versiones obtuvo un resultado como este:


c:\Program Files\Java\jdk1.8.0_191\bin>java -version
java version "1.8.0_191" <strong>(1)</strong>
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

Lo que simplemente significa Java 8. Con el cambio a versiones basadas en el tiempo con Java 9, el esquema de nombres también cambió, y las versiones de Java ya no tienen el prefijo 1.x. Ahora el número de versión se ve así:


c:\Program Files\Java\jdk11\bin&gt;java -version
openjdk version "11" 2018-09-25 <strong>(1)</strong>
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

¿Cuál es la diferencia entre las versiones de Java? ¿Debería aprender uno específico?

Viniendo de otros lenguajes de programación con roturas importantes entre versiones, como por ejemplo Python 2 a 3, es posible que se pregunte si lo mismo se aplica a Java.

Java es especial en este sentido, ya que es extremadamente compatible con versiones anteriores. Esto significa que se garantiza que su programa Java 5 u 8 se ejecutará con una máquina virtual Java 8-16, con algunas excepciones de las que no debe preocuparse por ahora.

Obviamente, no funciona al revés, digamos que su programa se basa en características de Java 14, que simplemente no están disponibles en una JVM de Java 8.

Esto significa un par de cosas:

  • No solo “aprende” una versión específica de Java, como la 12.
  • Más bien, obtendrá una buena base en todas las funciones del lenguaje hasta Java 8. Esto le servirá como una buena base.
  • Y luego aprenda, de una guía como esta, qué características adicionales vienen en Java 9-14 y úselas siempre que pueda.

¿Cuáles son ejemplos de estas nuevas funciones entre las versiones de Java?

Eche un vistazo a la sección Características de Java 8-16 .

Pero como regla general: los ciclos de lanzamiento más antiguos y más largos (3-5 años, hasta Java 8) significaron muchas características nuevas por lanzamiento.

El ciclo de lanzamiento de 6 meses significa muchas menos funciones por lanzamiento, por lo que puede ponerse al día rápidamente con las características del lenguaje Java 9-14.

¿Cuál es la diferencia entre un JRE y un JDK?

Hasta ahora, solo hemos estado hablando de “Java”. Pero, ¿qué es Java exactamente?

Primero, debe diferenciar entre un JRE (Java Runtime Environment) y un JDK (Java Development Kit).

Históricamente, descargaba solo un JRE si solo estaba interesado en ejecutar programas Java. Un JRE incluye, entre otras cosas, la máquina virtual Java (JVM) y la herramienta de línea de comandos “java”.

Para desarrollar nuevos programas Java, necesitaba descargar un JDK . Un JDK incluye todo lo que tiene el JRE, así como el compilador javac y un par de otras herramientas como javadoc (generador de documentación de Java) y jdb (depurador de Java).

Ahora, ¿por qué estoy hablando en tiempo pasado?

Hasta Java 8, el sitio web de Oracle ofrecía JRE y JDK como descargas separadas, aunque el JDK también siempre incluía un JRE en una carpeta separada. Con Java 9, esa distinción básicamente desapareció, y siempre está descargando un JDK. La estructura de directorios de los JDK también cambió, ya que ya no tenía una carpeta JRE explícita.

Por lo tanto, aunque algunas distribuciones (consulte la sección Distribuciones de Java ) todavía ofrecen una descarga de JRE por separado, parece haber una tendencia a ofrecer solo un JDK. Por lo tanto, vamos a utilizar Java y JDK indistintamente a partir de ahora.

Entonces, ¿cómo instalo Java o un JDK?

Ignore las imágenes de Java-Docker, los envoltorios .msi o los paquetes específicos de la plataforma por el momento. Al final, Java es solo un archivo .zip, nada más y nada menos.

Por lo tanto, todo lo que necesita hacer para instalar Java en su máquina es descomprimir su archivo jdk- {5-14} .zip. Ni siquiera necesita derechos de administrador para eso.

Su archivo Java descomprimido se verá así:


Directory C:\dev\jdk-11

12.11.2019  19:24    &lt;DIR&gt;          .
12.11.2019  19:24    &lt;DIR&gt;          ..
12.11.2019  19:23    &lt;DIR&gt;          bin
12.11.2019  19:23    &lt;DIR&gt;          conf
12.11.2019  19:24    &lt;DIR&gt;          include
12.11.2019  19:24    &lt;DIR&gt;          jmods
22.08.2018  19:18    &lt;DIR&gt;          legal
12.11.2019  19:24    &lt;DIR&gt;          lib
12.11.2019  19:23             1.238 release

La magia ocurre en el directorio / bin, que en Windows se ve así:


Directory C:\dev\jdk-11\bin
...
12.11.2019  19:23           272.736 java.exe
...
12.11.2019  19:23            20.832 javac.exe
...

Entonces, todo lo que necesita hacer es descomprimir ese archivo y poner el directorio / bin en su variable PATH, para que pueda llamar al comando ‘java’ desde cualquier lugar.

(En caso de que se lo esté preguntando, los instaladores de GUI como el de Oracle o AdoptOpenJDK descomprimirán y modificarán la variable PATH por usted, eso es todo).

Para verificar que instaló Java correctamente, puede simplemente ejecutar ‘java -version’. Si la salida se parece a la que se muestra a continuación, está listo para comenzar.


openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

Ahora queda una pregunta: ¿De dónde sacas ese archivo .zip de Java? Lo que nos lleva al tema de las distribuciones.

Distribuciones de Java

Hay una variedad de sitios que ofrecen descargas de Java (léase: JDK) y no está claro “quién ofrece qué y con qué licencias”. Esta sección arrojará algo de luz sobre esto.

El proyecto OpenJDK

En términos de código fuente de Java (léase: el código fuente de su JRE / JDK), solo hay uno , que vive en el sitio del proyecto OpenJDK .

Sin embargo, esto es solo código fuente, no una compilación distribuible (piense: su archivo .zip con el comando java compilado para su sistema operativo específico). En teoría, tú y yo podríamos producir una compilación a partir de ese código fuente, llamarlo, digamos, MarcoJDK y comenzar a distribuirlo. Pero nuestra distribución carecería de certificación, para poder llamarnos legalmente compatibles con Java SE .

Por eso, en la práctica, hay un puñado de proveedores que realmente crean estas compilaciones, las certifican (consulte TCK ) y luego las distribuyen.

Y aunque los proveedores no pueden, por ejemplo, eliminar un método de la clase String antes de producir una nueva compilación de Java, pueden agregar marcas (¡yay!) O agregar algunas otras utilidades (por ejemplo, CLI) que consideren útiles. Pero aparte de eso, el código fuente original es el mismo para todas las distribuciones de Java.

Compilaciones de OpenJDK (por Oracle) y compilaciones de OracleJDK

Uno de los proveedores que crea Java desde la fuente es Oracle. Esto conduce a dos distribuciones de Java diferentes , que pueden resultar muy confusas al principio.

  1. OpenJDK compila por Oracle (!). Estas compilaciones son gratuitas y sin marca, pero Oracle no lanzará actualizaciones para versiones anteriores, digamos Java 15, tan pronto como salga Java 16.
  2. OracleJDK , que es una compilación comercial de marca que comienza con el cambio de licencia en 2019. Lo que significa que se puede usar de forma gratuita durante el desarrollo, pero debe pagar a Oracle si lo usa en producción. Para esto, obtiene un soporte más prolongado, es decir, actualizaciones de versiones y un número de teléfono al que puede llamar si su JVM se vuelve loca.

Ahora, históricamente (antes de Java 8) hubo diferencias de origen reales entre las compilaciones de OpenJDK y las compilaciones de OracleJDK, donde se podría decir que OracleJDK era “mejor”. Pero a día de hoy, ambas versiones son esencialmente iguales, con pequeñas diferencias .

Luego se reduce a que desea soporte comercial pagado (un número de teléfono) para su versión de Java instalada.

AdoptOpenJDK

En 2017, un grupo de miembros, desarrolladores y proveedores de Java User Group (Amazon, Microsoft, Pivotal, Redhat y otros) comenzaron una comunidad, llamada AdoptOpenJDK .

Proporcionan compilaciones OpenJDK sólidas y gratuitas con mayor disponibilidad / actualizaciones e incluso le ofrecen la opción de dos máquinas virtuales Java diferentes: HotSpot y OpenJ9 .

Muy recomendable si está buscando instalar Java.

Azul Zulu, Amazon Corretto, SAPMachine

Encontrará una lista completa de las compilaciones de OpenJDK en el sitio de Wikipedia de OpenJDK . Entre ellos se encuentran Azul Zulu , Amazon Corretto y SapMachine , por nombrar algunos. Para simplificar demasiado, se reduce a que tenga diferentes opciones de soporte / garantías de mantenimiento.

Pero asegúrese de visitar los sitios web individuales para conocer las ventajas de cada distribución.

Una descripción general completa de la distribución de OpenJDK

Rafael Winterhalter compiló una gran lista de todas las compilaciones de OpenJDK disponibles, incluido su sistema operativo, arquitectura, licencias, soporte y ventanas de mantenimiento.

Compruébalo aquí: https://rafael.codes/openjdk/ .

Recomendación

Para repetir desde el principio, en 2020, a menos que tenga requisitos muy específicos, obtenga su archivo jdk.zip (.tar.gz / .msi / .pkg) de https://adoptopenjdk.net o elija un paquete proporcionado por su proveedor de sistema operativo.

Funciones de Java 8-16

Como se mencionó al principio de esta guía: Esencialmente todas (no sea exigente ahora) las características del lenguaje Java 8 también funcionan en Java 14. Lo mismo ocurre con todas las demás versiones de Java intermedias.

Que a su vez significa que todas las características del lenguaje de Java 8 sirven de muy buena base de conocimientos de Java y todo lo demás (Java 9-14) es bastante más características adicionales en la parte superior de esa línea de base.

Aquí hay una descripción general rápida de lo que ofrecen las versiones específicas:

– Java 8 –

Java 8 fue un lanzamiento masivo y puede encontrar una lista de todas las funciones en el sitio web de Oracle . Sin embargo, hay dos conjuntos de funciones principales que me gustaría mencionar aquí:

Características del lenguaje: Lambdas, etc.

Antes de Java 8, cada vez que deseaba crear una instancia, por ejemplo, de un nuevo Runnable, tenía que escribir una clase interna anónima así:


 <strong>Runnable</strong> runnable = <strong>new</strong> <strong>Runnable</strong>(){
       @Override
       <strong>public</strong> <strong>void</strong> run(){
         <strong>System</strong>.out.println("Hello world !");
       }
     };

Con lambdas, el mismo código se ve así:


<strong>Runnable</strong> runnable = () -&gt; <strong>System</strong>.out.println("Hello world two!");

También tiene referencias de métodos, anotaciones repetidas, métodos predeterminados para interfaces y algunas otras características del idioma.

Colecciones y transmisiones

En Java 8 también tiene operaciones de estilo funcional para colecciones, también conocidas como Stream API. Un ejemplo rápido:


<strong>List</strong>&lt;<strong>String</strong>&gt; list = <strong>Arrays</strong>.asList("franz", "ferdinand", "fiel", "vom", "pferd");

Ahora, antes de Java 8, básicamente tenía que escribir bucles for para hacer algo con esa lista.

Con la API de Streams, puede hacer lo siguiente:


list.stream()
    .filter(name -&gt; name.startsWith("f"))
    .map(<strong>String</strong>::toUpperCase)
    .sorted()
    .forEach(<strong>System</strong>.out::println);

Si quieres más práctica de Java 8

Obviamente, solo puedo dar una descripción general rápida de cada método Stream, Lambda u opcional recién agregado en Java 8 en el alcance de esta guía.

Si desea una descripción general más detallada y completa, incluidos ejercicios, puede echar un vistazo a mi curso de características principales de Java 8 .

– Java 9 –

Java 9 también fue un lanzamiento bastante grande, con un par de adiciones:

Colecciones

Las colecciones tienen un par de nuevos métodos de ayuda para construir fácilmente Listas, Conjuntos y Mapas.


<strong>List</strong>&lt;<strong>String</strong>&gt; list = <strong>List</strong>.of("one", "two", "three");
<strong>Set</strong>&lt;<strong>String</strong>&gt; set = <strong>Set</strong>.of("one", "two", "three");
<strong>Map</strong>&lt;<strong>String</strong>, <strong>String</strong>&gt; map = <strong>Map</strong>.of("foo", "one", "bar", "two");

Corrientes

Las transmisiones recibieron un par de adiciones, en forma de métodos takeWhile, dropWhile e iterate.


Stream&lt;<strong>String</strong>&gt; stream = Stream.iterate("", s -&gt; s + "s")
  .takeWhile(s -&gt; s.length() &lt; 10);

Opcionales

Los opcionales obtuvieron el método ifPresentOrElse.


user.ifPresentOrElse(this::displayAccount, this::displayLogin);

Interfaces

Las interfaces tienen métodos privados:


<strong>public</strong> <strong>interface</strong> <strong>MyInterface</strong> {

    <strong>private</strong> <strong>static</strong> <strong>void</strong> myPrivateMethod(){
        <strong>System</strong>.out.println("Yay, I am private!");
    }
}

Otras características del idioma

Y un par de otras mejoras, como una declaración mejorada de prueba con recursos o extensiones de operador de diamantes.

JShell

Finalmente, Java tiene un shell donde puedes probar comandos simples y obtener resultados inmediatos.


% jshell
|  Welcome to JShell -- Version 9
|  For an introduction type: /help intro

jshell&gt; int x = 10
x ==&gt; 10

HTTPClient

Java 9 trajo la versión preliminar inicial de un nuevo HttpClient. Hasta entonces, el soporte Http incorporado de Java era bastante de bajo nivel, y tenía que recurrir al uso de bibliotecas de terceros como Apache HttpClient u OkHttp (que son excelentes bibliotecas, ¡por cierto!).

Con Java 9, Java tiene su propio cliente moderno, aunque en modo de vista previa, lo que significa que está sujeto a cambios en versiones posteriores de Java.

Project Jigsaw: Módulos Java y archivos Jar de múltiples versiones

Java 9 obtuvo el sistema de módulos Jigsaw , que se parece un poco a la buena y antigua especificación OSGI . No está dentro del alcance de esta guía entrar en detalles completos sobre Jigsaw, pero eche un vistazo a los enlaces anteriores para obtener más información.

Los archivos .jar de múltiples versiones hicieron posible tener un archivo .jar que contiene diferentes clases para diferentes versiones de JVM. Por lo tanto, su programa puede comportarse de manera diferente / tener diferentes clases utilizadas cuando se ejecuta en Java 8 frente a Java 10, por ejemplo.

Si quieres más práctica de Java 9

Nuevamente, esta es solo una descripción general rápida de las características de Java 9 y si desea explicaciones y ejercicios más completos, eche un vistazo al curso de características principales de Java 9 .

– Java 10 –

Ha habido algunos cambios en Java 10, como Garbage Collection, etc. Pero el único cambio real que probablemente verá usted como desarrollador es la introducción de la palabra clave “var”, también llamada inferencia de tipo de variable local.

Inferencia de tipo de variable local: var-keyword


<em>// Pre-Java 10</em>

<strong>String</strong> myName = "Marco";

<em>// With Java 10</em>

var myName = "Marco"

Se siente Javascript-y, ¿no? Sin embargo, todavía está fuertemente tipado y solo se aplica a las variables dentro de los métodos (gracias, dpash , por señalarlo nuevamente).

– Java 11 –

Java 11 también fue una versión algo más pequeña, desde la perspectiva del desarrollador.

Cuerdas y archivos

Strings and Files obtuvieron un par de métodos nuevos (no todos se enumeran aquí):


"Marco".isBlank();
"Mar\nco".lines();
"Marco  ".strip();

Path path = Files.writeString(Files.createTempFile("helloworld", ".txt"), "Hi, my name is!");
<strong>String</strong> s = Files.readString(path);

Ejecutar archivos de origen

A partir de Java 10, puede ejecutar archivos fuente de Java sin tener que compilarlos primero. Un paso hacia la creación de guiones.


ubuntu@DESKTOP-168M0IF:~$ java MyScript.java

Inferencia de tipo de variable local (var) para parámetros lambda

El encabezado lo dice todo:


(var firstName, var lastName) -&gt; firstName + lastName

HttpClient

HttpClient de Java 9 en su versión final sin vista previa.

Otras cosas

Flight Recorder, No-Op Garbage Collector, Nashorn-Javascript-Engine obsoleto, etc.

– Java 12 –

Java 12 tiene un par de funciones nuevas y limpiezas , pero las únicas que vale la pena mencionar aquí son la compatibilidad con Unicode 11 y una vista previa de la nueva expresión de cambio, que verá tratada en la siguiente sección.

– Java 13 –

Puede encontrar una lista completa de funciones aquí , pero básicamente obtiene soporte para Unicode 12.1, así como dos funciones de vista previa nuevas o mejoradas (sujetas a cambios en el futuro):

Cambiar expresión (vista previa)

Las expresiones de cambio ahora pueden devolver un valor. Y puede usar una sintaxis de estilo lambda para sus expresiones, sin los problemas de caída / interrupción:

Las antiguas declaraciones de cambio se veían así:


<strong>switch</strong>(status) {
  <strong>case</strong> SUBSCRIBER:
    <em>// code block</em>
    <strong>break</strong>;
  <strong>case</strong> FREE_TRIAL:
    <em>// code block</em>
    <strong>break</strong>;
  <strong>default</strong>:
    <em>// code block</em>
}

Mientras que con Java 13, las declaraciones de cambio pueden verse así:


<strong>boolean</strong> result = <strong>switch</strong> (status) {
    <strong>case</strong> SUBSCRIBER -&gt; <strong>true</strong>;
    <strong>case</strong> FREE_TRIAL -&gt; <strong>false</strong>;
    <strong>default</strong> -&gt; <strong>throw</strong> <strong>new</strong> <strong>IllegalArgumentException</strong>("something is murky!");
};

Cadenas de varias líneas (vista previa)

Finalmente puedes hacer esto en Java:


<strong>String</strong> htmlBeforeJava13 = "&lt;html&gt;\n" +
              "    &lt;body&gt;\n" +
              "        &lt;p&gt;Hello, world&lt;/p&gt;\n" +
              "    &lt;/body&gt;\n" +
              "&lt;/html&gt;\n";

<strong>String</strong> htmlWithJava13 = """
              &lt;html&gt;
                  &lt;body&gt;
                      &lt;p&gt;Hello, world&lt;/p&gt;
                  &lt;/body&gt;
              &lt;/html&gt;
              """;

Java 14

Cambiar expresión (estándar)

Las expresiones de cambio que se obtuvieron como vista previa en las versiones 12 y 13, ahora están estandarizadas.


<strong>int</strong> numLetters = <strong>switch</strong> (day) {
    <strong>case</strong> MONDAY, FRIDAY, SUNDAY -&gt; 6;
    <strong>case</strong> TUESDAY                -&gt; 7;
    <strong>default</strong>      -&gt; {
      <strong>String</strong> s = day.toString();
      <strong>int</strong> result = s.length();
      yield result;
    }
};

Registros (vista previa)

Ahora hay clases de registro, que ayudan a aliviar el dolor de escribir mucho texto estándar con Java.

Eche un vistazo a esta clase anterior a Java 14, que solo contiene datos, (potencialmente) getters / setters, equals / hashcode, toString.


<strong>final</strong> <strong>class</strong> <strong>Point</strong> {
    <strong>public</strong> <strong>final</strong> <strong>int</strong> x;
    <strong>public</strong> <strong>final</strong> <strong>int</strong> y;

    <strong>public</strong> <strong>Point</strong>(<strong>int</strong> x, <strong>int</strong> y) {
        this.x = x;
        this.y = y;
    }
}
    <em>// state-based implementations of equals, hashCode, toString</em>
    <em>// nothing else</em>

Con los registros, ahora se puede escribir así:


record <strong>Point</strong>(<strong>int</strong> x, <strong>int</strong> y) { }

Nuevamente, esta es una función de vista previa y está sujeta a cambios en futuras versiones.

Excepciones útiles de puntero nulo

Finalmente, las NullPointerExceptions describen exactamente qué variable era nula.


author.age = 35;
---
<strong>Exception</strong> in thread "main" java.lang.NullPointerException:
     Cannot assign field "age" because "author" is <strong>null</strong>

Coincidencia de patrones para InstanceOf (versión preliminar) Pattern Matching For InstanceOf (Preview)

Mientras que anteriormente tenías que (lanzar) tus objetos dentro de una instancia como esta:


<strong>if</strong> (obj <strong>instanceof</strong> <strong>String</strong>) {
    <strong>String</strong> s = (<strong>String</strong>) obj;
    <em>// use s</em>
}

Ahora puede hacer esto, eliminando efectivamente el yeso.


<strong>if</strong> (obj <strong>instanceof</strong> <strong>String</strong> s) {
    <strong>System</strong>.out.println(s.contains("hello"));
}

Herramienta de embalaje (incubadora)

Hay una herramienta jpackage de incubación , que permite empaquetar su aplicación Java en paquetes específicos de la plataforma, incluidas todas las dependencias necesarias.

  • Linux: deb y rpm
  • macOS: pkg y dmg
  • Windows: msi y exe

Recolectores de basura

Se ha eliminado el recolector de basura Concurrent Mark Sweep (CMS) y se ha agregado el recolector de basura Z experimental.

Java 15

Bloques de texto / cadenas de varias líneas

Introducidas como una característica experimental en Java 13 (ver arriba), las cadenas de varias líneas ahora están listas para producción.


<strong>String</strong> text = """
                Lorem ipsum dolor sit amet, consectetur adipiscing \
                elit, sed do eiusmod tempor incididunt ut labore \
                et dolore magna aliqua.\
                """;

Clases selladas – Vista previa

Si alguna vez quisiste tener un control aún más cercano sobre quién puede subclasificar tus clases, ahora existe la 

<em>sealed</em>
función.


<strong>public</strong> <strong>abstract</strong> sealed <strong>class</strong> <strong>Shape</strong>
    permits Circle, <strong>Rectangle</strong>, Square {...}

Esto significa que mientras la clase es 

<em>public</em>
, las únicas clases permitidas para subclase 
<em>Shape</em>
son 
<em>Circle</em>
<em>Rectangle</em>
<em>Square</em>
.

Registros y coincidencia de patrones

Las funciones 

<em>Records</em>
<em>Pattern Matching</em>
de Java 14 (ver arriba), todavía están en vista previa y aún no están finalizadas.

Motor JavaScript Nashorn

Después de haber quedado obsoleto en Java 11, Nashorn Javascript Engine finalmente se eliminó en JDK 15.

ZGC: listo para producción

El recolector de basura Z ya no está marcado como experimental. Ahora está listo para producción.

Java 16

Canales de socket de dominio Unix

Ahora puede conectarse a sockets de dominio Unix (también compatible con macOS y Windows (10+).


 socket.connect(UnixDomainSocketAddress.of(
        "/var/run/postgresql/.s.PGSQL.5432"));

API de vinculador externo: vista previa

Un reemplazo planificado para JNI (Java Native Interface), que le permite vincularse a bibliotecas nativas (piense en C).

Registros y coincidencia de patrones

Ambas funciones están ahora listas para producción y ya no están marcadas 

<em>in preview</em>
.

Clases Selladas

Las clases selladas (de Java 15, ver arriba) todavía están en vista previa.

FUENTE