JavaRush /Blog Java /Random-ES /Java 12 ya está aquí: ¿qué hay de nuevo?

Java 12 ya está aquí: ¿qué hay de nuevo?

Publicado en el grupo Random-ES
Entonces, Java apareció en el número 12. Y aunque esta no es una versión LTS (es decir, no es soporte a largo plazo, no es una versión que será compatible durante mucho tiempo). La versión 11 se considera la primera versión LTS con ocho versiones. año de soporte ), aparecieron cosas interesantes en sus actualizaciones. Veamos los más importantes de ellos. Recuerde que en Java, las propuestas de cambio se abrevian como jeps (de JDK Enhancement Proposal). Java 12 ya está aquí: ¿qué hay de nuevo?  - 1

El JDK 12 de Jep más interesante

189: Shenandoah: un recolector de basura con bajo tiempo de pausa (experimental) El recolector de basura, Shenandoah, utiliza un nuevo algoritmo que reduce el tiempo de ejecución al limpiar simultáneamente con los subprocesos de Java en ejecución. En este caso, el tiempo de pausa en Shenandoah será el mismo independientemente del tamaño del montón. Por alguna razón, Oracle no incluyó Sheandoah en sus versiones "oficiales", a pesar de que los desarrolladores consideran que esta característica es una de las más importantes de la nueva versión. Entonces, si planeas probar el recolector de basura avanzado, debes usar compilaciones de terceros, como Azul . 230: Microbenchmark Suite Microbenchmark es un microbenchmark que mide el rendimiento de algún elemento pequeño. En Java, se escriben y ejecutan utilizando el marco JMH. Desde la versión 12, JMH se ha agregado al JDK y ya hay pruebas escritas en él, lo que facilita la vida a los desarrolladores. 325: Expresiones de cambio (vista previa) Una nueva forma de escribir una expresión con una declaración de cambio. La página de funciones proporciona un código de ejemplo que utiliza el interruptor tradicional, donde el uso constante de break lo hace innecesariamente detallado, lo que genera frecuentes errores aleatorios.
switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        System.out.println(6);
        break;
    case TUESDAY:
        System.out.println(7);
        break;
    case THURSDAY:
    case SATURDAY:
        System.out.println(8);
        break;
    case WEDNESDAY:
        System.out.println(9);
        break;
}
Los autores de la actualización proponen introducir una nueva forma de etiqueta de cambio “caso L ->” para indicar claramente que solo se ejecutará el código a la derecha de la etiqueta si esta etiqueta es adecuada. Por lo tanto, el código mostrado arriba se puede acortar significativamente usando la nueva sintaxis:
switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
    case TUESDAY                -> System.out.println(7);
    case THURSDAY, SATURDAY     -> System.out.println(8);
    case WEDNESDAY              -> System.out.println(9);
}
334: API de constantes JVM El grupo de constantes contiene las denominadas constantes cargables. Estos son valores, por ejemplo de tipo String o cualquier tipo primitivo, así como artefactos en tiempo de ejecución, como clases y métodos. Al trabajar con archivos de clase, los programadores se beneficiarían de herramientas convenientes para manipular constantes cargables. Los autores de este jep comenzaron a resolver este problema introduciendo nuevos tipos de enlaces simbólicos basados ​​en valores, cada uno de los cuales describirá un tipo específico de constantes. Código de innovación . 340: Un puerto AArch64, no dos Este nombre complejo esconde una solución a un problema que surgió en Java 9, cuando los puertos ARM de 64 bits de Oracle y aarch64 de Red Hat aparecieron en el kit al mismo tiempo. Además, ya en el momento del lanzamiento de JDK 11, ni siquiera el propio Oracle admitía la versión de 64 bits de los puertos de Oracle. Así que ahora se han eliminado los puertos de Oracle de 64 bits, dejando ARM32 de 32 bits y aarch64 de 64 bits, más productivo. 341: Archivos CDS predeterminados Una actualización muy buena ya que realmente acelera el inicio de la aplicación. No es ningún secreto que cuando se inicia una aplicación Java, comienza a cargarse una gran cantidad de clases, y este es un proceso bastante largo. CDS significa Class Data Sharing, y esta función le permite empaquetar todas estas clases iniciadas al inicio en un archivo especial para compartir datos de clases, utilizando la lista predeterminada de estas mismas clases. Como resultado, la velocidad de inicio de la aplicación aumenta significativamente. 344: Colecciones mixtas abortables para G1 G1 es un recolector de basura que se convirtió en el principal recolector de basura en JDK 9, reemplazando a Parallel GC. En Java 10, G1 aprendió a recolectar basura en múltiples subprocesos. Sin embargo, no todos estaban contentos con su trabajo; uno de los principales problemas eran las largas pausas. Ahora se pueden cancelar. G1, basándose en un análisis del comportamiento del programa, determina la cantidad de trabajo y luego recopila objetos "vivos" en un conjunto de Colección hasta que recopila todo, sin detenerse. A menudo, G1 no calculaba la cantidad de trabajo y trabajaba demasiado. Una vez que se implementa jep-344, G1 puede cambiar a recolección de basura incremental y si el siguiente paso tarda más de lo razonable en completarse, ese paso se puede cancelar. 346: Devolver rápidamente la memoria comprometida no utilizada de G1 Y algunas actualizaciones más en el campo del ensamblador G1 antes mencionado. A veces sucedió que había un montón de memoria dinámica de Java, pero nadie la usó, esta memoria. En Java 12, ahora puede "devolver" la memoria inactiva al sistema operativo. Anteriormente, era muy raro que G1 renunciara a la memoria, pero ahora todo se ha simplificado. Con la nueva característica, la aplicación se define como inactiva si el intervalo desde la última compilación ha expirado y no hay ningún ciclo simultáneo. Otra situación es si la función getloadavg(), que ha sido monitoreada durante algún tiempo, muestra una carga por debajo del umbral aceptable establecido. Si ocurre uno de dos eventos, comienza la recolección parcial de basura. Lo que Java 12 no tiene: literales de cadena sin formato Muchos desarrolladores estaban interesados ​​en esta característica, pero nunca apareció en esta versión. Sus autores decidieron que todavía necesitaba trabajo. Por lo tanto, nos atrevemos a esperar que en una de las próximas versiones de Java aparezca una función para trabajar cómodamente con cadenas literales. La compatibilidad con literales de cadena sin formato le permite trabajar con información de cadena independientemente del idioma. Esto elimina la necesidad de blindaje. Particularmente útil en expresiones regulares, donde las barras invertidas se usan ampliamente, y en rutas de Windows, donde las barras invertidas se usan como delimitadores. Es decir, para evitar este tipo de construcciones: C:\\My\\Test\\Pack\\
Todo programador encuentra a menudo una u otra dificultad en su trabajo. A veces están asociados con la inexperiencia del desarrollador, pero otras veces con la imperfección de la herramienta en sí. Java es un gran lenguaje, pero está lejos de ser perfecto. ¿Quizás ya haya encontrado algo en Java y sepa qué le gustaría cambiar en su “herramienta” (lenguaje)? ¡Comparte en los comentarios!

conclusiones

No hubo revolución en Java 12. Sin embargo, nadie lo planeó. Sin embargo, una serie de innovaciones tienen como objetivo optimizar el funcionamiento de las aplicaciones y acelerar el trabajo, lo cual es una buena noticia. Por cierto, IDEA ya es compatible con JDK 12, por lo que puedes probar sus capacidades. Por supuesto, pocas actualizaciones afectan directamente a los principiantes, aunque incluso aquellos que acaban de empezar a aprender JavaRush pueden jugar con el nuevo interruptor (después de configurar el indicador --enable-preview).
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION