Todo sobre Java12: nuevas funciones, seguridad y declaración de expresión de cambio (ejemplos)
Publicado: 2019-04-07 El 19th March 2019
se lanzó Java12. Como sabemos, Java12
fue parte del lanzamiento rápido, se lanzó solo 6 meses después del lanzamiento de Java11.
En este tutorial, repasaremos todos los cambios y nuevas características de Java12.
Personalmente, cambié a Java12 para todo mi desarrollo, pero para el ciclo de producción es demasiado pronto. Mantenga este tutorial marcado como favorito cuando desee cambiar a Java12 para todos sus proyectos de producción.
¿Qué hay de nuevo en Java12? Nuevas características en Java12:
Hay bastantes funciones internas y relacionadas con el flujo de trabajo del usuario en Java12 que cambiaron. Echemos un vistazo a lo que hay dentro de Java 12.
Cambio-1) Descarga de Clase Concurrente
El recolector de basura normal generalmente descarga la variable no utilizada durante el ciclo del GC y, por lo general, notamos alguna detención/pausa en el proceso, o un aumento de la CPU durante ese tiempo. Por lo general, ni siquiera nos damos cuenta de eso.
Con ZGC
(Z Garbage Collector): Java12 también admite la descarga simultánea de clases. Como esto sucede durante el ciclo normal de GC, no hay ninguna pausa ni tampoco más uso adicional de memoria.
De forma predeterminada, ZGC está habilitado en Java12. No se requiere más acción
¿Cómo deshabilitar ZGC?
- Simplemente inicie su aplicación con el argumento de línea de comando JVM
-XX:-ClassUnloading
Cambio-2) Obtener más detalles sobre JVM Crash
Cuando hay un error OOM (memoria insuficiente) o fallas de JVM, generalmente Java crea archivos de volcado con todos los detalles.
1 |
- XX : HeapDumpPath =/ tmp / crunchify / - XX : + HeapDumpOnOutOfMemoryError |
Con estos parámetros de JVM, los archivos de volcado se crearán en la carpeta /tmp/crunchify/
en caso de error OOM.
Hay una opción más agregada en Java12:
1 |
- XX : + ExtensiveErrorReports |
Se creará un nuevo archivo de registro llamado hs_err<pid>.log
con todos los detalles sobre el bloqueo de JVM. Esto es muy útil para su entorno de producción si ve fallas frecuentes y desea depurar más.
De forma predeterminada, está deshabilitado, pero puede habilitar un informe de fallas extenso agregando el parámetro de línea de comando JVM anterior.
Cambio-3) Formato de número compacto
java.text agrega soporte para formato numérico compacto. 100o
se puede mencionar como 1K
y 100000
se puede mencionar como 100K
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package crunchify . com . tutorials ; import java . text . NumberFormat ; import java . util . Locale ; /** * @author Crunchify.com * Java12 Compact Number format example * */ public class CrunchifyJava12CompactNumber { public static void main ( String args [ ] ) { // NumberFormat is the abstract base class for all number formats. // This class provides the interface for formatting and parsing numbers. NumberFormat also provides methods for determining which locales have number formats, and what their names are. NumberFormat crunchifyFormat = NumberFormat . getCompactNumberInstance ( Locale . US , NumberFormat . Style . SHORT ) ; // getCompactNumberInstance returns a compact number format for the specified locale and formatStyle. String crunchifyResult = crunchifyFormat . format ( 100000 ) ; System . out . println ( "NumberFormat.Style.SHORT Result: " + crunchifyResult ) ; } } |
Resultado:
1 |
NumberFormat . Style . SHORT Result : 100K |
Cambio-4) Mejoras de seguridad de Java
cambios security-libs/java.security
:
- rechazar y permitir Opciones para java.security.manager
- si
disallow
se permite, System.setSecurityManager
no se puede usar para configurar el administrador de seguridad.
- si
- -opción de nombre de grupo agregada a keytool generación de pares de claves
- un usuario puede especificar un grupo con nombre al generar un par de claves.
- Personalización de la generación
PKCS12 keystore
- incluye algoritmos y parámetros para
- protección clave
- protección de certificados
- MacData
- incluye algoritmos y parámetros para
- Nuevos eventos de seguridad JFR
- ¿Qué es JFR (Java Flight Recorder)?
- 4 nuevos eventos JFR agregados
- jdk.X509Certificado
- jdk.X509Validación
- jdk.TLSHhandshake
- jdk.SecurityPropertyModification
Cambio-5) JEP 325: Cambiar expresiones
La Switch statement
mejorada ahora es compatible con Java12.
-
case L -> syntax
. Aquí no es necesario ningún descanso. - Uso de la expresión de cambio
- esta es una declaración de cambio simplificada
- si una etiqueta coincide, solo se ejecuta la expresión a la derecha de una etiqueta de flecha.
- No se necesita declaración de interrupción.
CrunchifyJava12SwitchExample.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
package crunchify . com . tutorials ; import java . util . Scanner ; /** * @author Crunchify.com * What's new in Java12 Switch statement? * */ public class CrunchifyJava12SwitchExample { public static void main ( String [ ] args ) { Scanner crunchifyObj = new Scanner ( System . in ) ; log ( "Enter company name from: Google, Facebook, PayPal, eBay, Twitter, LinkedIn, Apple" ) ; String company = crunchifyObj . nextLine ( ) ; log ( "Selected Company: " + company ) ; // Pre-Java12 Switch statement switch ( company ) { case "Google" : case "Facebook" : case "PayPal" : case "eBay" : case "Twitter" : log ( "Pre-Java12: This switch is for companies Google, Facebook, PayPal, eBay & Twitter" ) ; break ; case "" : case "Apple" : case "LinkedIn" : log ( "Pre-Java12: This switch is for companies Apple & LinkedIn" ) ; break ; default : log ( "Pre-Java12: Oops... Invalid company" ) ; } /** * Java 12 based case L -> syntax operation. * Here there isn't any break necessary. */ switch ( company ) { case "Google" , "Facebook" , "PayPal" , "eBay" , "Twitter" - > log ( "Java12: This switch is for companies Google, Facebook, PayPal, eBay & Twitter" ) ; case "Apple" , "LinkedIn" - > log ( "Java12: This switch is for companies Apple & LinkedIn" ) ; default - > { log ( "Java12: Oops... Invalid company" ) ; } } /** * This is switch expression */ final String companyName ; companyName = switch ( company ) { case "Google" , "Facebook" , "PayPal" , "eBay" , "Twitter" - > ( "Java12 Expression: This switch is for companies Google, Facebook, PayPal, eBay & Twitter" ) ; case "Apple" , "LinkedIn" - > ( "Java12 Expression: This switch is for companies Apple & LinkedIn" ) ; /** * it's also possible to do switch operation without a block and break */ default - > { break "Java12 Expression: Oops... Invalid company" ; } } ; log ( companyName ) ; } public static void log ( String result ) { System . out . println ( result ) ; } } |

Resultado de la IDEA de IntelliJ:
1 2 3 4 5 6 7 8 |
Enter company name from : Google , Facebook , PayPal , eBay , Twitter , LinkedIn , Apple Twitter Selected Company : Twitter Pre - Java12 : This switch is for companies Google , Facebook , PayPal , eBay & Twitter Java12 : This switch is for companies Google , Facebook , PayPal , eBay & Twitter Java12 Expression : This switch is for companies Google , Facebook , PayPal , eBay & Twitter |
Cambio-6) API de constantes de JVM
java.lang.invoke.constant
: como sabrá, la clase Java tiene un grupo constante que almacena todos los operandos en tiempo de ejecución.
Java12 agrega API para invocar constantes en tiempo de ejecución.
Funciones eliminadas de Java12:
Características obsoletas de Java12:
Avíseme si tiene algún tutorial útil sobre Java12 que le gustaría incluir aquí.