SlideShare una empresa de Scribd logo
v1Alexis López - aalopez@gmail.com - @aa_lopez
Java 9
21 SEP 2017
v1Alexis López - aalopez@gmail.com - @aa_lopez
Acerca de...
v1Alexis López - aalopez@gmail.com - @aa_lopez
40 novedades de JavaSE 9
21 SEP 2017
Lanzamiento
Desarrollado
91JEPs
v1Alexis López - aalopez@gmail.com - @aa_lopez
JigSaw – Modularidad en JDK
● Organización de clases en módulos
– 94 Módulos
● APIs restringidas son encapsuladas
– sun.misc.Unsafe
– Opciones para línea de comandos las habilitan nuevamente
● Impacta directamente las aplicaciones (APIs restringidas)
– Pruebas son deseadas
v1Alexis López - aalopez@gmail.com - @aa_lopez
JigSaw – Modularidad en JDK
class Console
class String
...
...
module java.base
package java.io
package java.lang
class Connection
module java.sql
package java.sql
...
modules...
packages...
JDK
v1Alexis López - aalopez@gmail.com - @aa_lopez
JigSaw – Modularidad en JDK
java.base
JDK
java.logging
java.sql
java.xml
Otros
modulos
Nuestras
aplicaciones
implicito
explicito
explicito
implicito
explicito explicito
v1Alexis López - aalopez@gmail.com - @aa_lopez
Mejoras en cadenas de texto (Strings)
1. Cadenas de texto más compactas (JEP 254)
– Mejor uso de memoria
● 2 bytes/char → 1 byte/char (cuando se pueda)
● ISO-8859-1/Latin-1
– Reduce actividad del GC
2. Concatenación de cadenas (JEP 280)
– ByteCode: concatenación estática (StringBuilder) → invokedynamic
– Permite mejoras a futuro sin alterar javac
v1Alexis López - aalopez@gmail.com - @aa_lopez
Mejoras en cadenas de texto (Strings)
//Los siguientes métodos son iguales en términos de su ByteCode
static String saludo(String nombre)
{
return "Hola " + nombre;
}
static String saludo(String nombre)
{
return new StringBuilder().append("Hola " ).append(nombre).toString();
}
v1Alexis López - aalopez@gmail.com - @aa_lopez
Mejoras en cadenas de texto (Strings)
static java.lang.String saludo(java.lang.String);
Code:
0: new #2 // class java/lang/StringBuilder
3: dup
4: invokespecial #3 // Method java/lang/StringBuilder."<init>":()V
7: ldc #4 // String Hola
9: invokevirtual #5 // Method java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
12: aload_0
13: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
16: invokevirtual #6 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
19: areturn
v1Alexis López - aalopez@gmail.com - @aa_lopez
Mejoras en cadenas de texto (Strings)
//Java 9 usa invokeDynamic
static java.lang.String saludo(java.lang.String);
Code:
0: aload_0
1: invokedynamic #2, 0 // InvokeDynamic #0:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
6: areturn
v1Alexis López - aalopez@gmail.com - @aa_lopez
Mejoras en documentación (JavaDocs)
3.HTML5 (JEP 224)
– Ahora javadoc puede generar
código HTML5
● Nuevo parámetro de ejecución
indica el tipo a generar
● HTML4 continua siendo el tipo
por defecto
● HTML5 será el tipo por
defecto a partir de Java 10
2. Campo de búsqueda en la
documentación (JEP 225)
v1Alexis López - aalopez@gmail.com - @aa_lopez
Adopción de nuevos estándares
5. Unicode 7.0 (JEP 227)
– ~ 3000 Nuevos caracteres
5. Unicode 8.0 (JEP 267)
– ~ 8000 Nuevos caracteres
6. SHA-3 (JEP 287)
– Nuevo estándar para
criptografía
7. DTLS (JEP 219)
– Protocolo seguro para
datagramas
9. PKCS12 Keystores (JEP 229)
– Reemplaza a JKS
– Extensible, estandarizado y
ampliamente adoptado
– Mecanismo de detección para
asegurar compatibilidad
5. UTF-8 en .properties (JEP 226)
– Ya no es necesario convertir
texto a ISO-8859-1
● Informaciu00F3n → Información
v1Alexis López - aalopez@gmail.com - @aa_lopez
Refinando Project Coin (JEP 213)
11.@SafeVarargs en métodos privados
– Extiende los lugares donde puede ser usada
12.Variables efectivamente constantes en
bloques try-con-recursos
– Posibilidad de usar variables definidas por fuera
del bloque sin definir una nueva
13.Guión de piso (_) no puede ser usado como
identificador
– Se reserva para futura funcionalidad
14.Operador diamante en clases anónimas
– Comparator<String> c = new Comparator<>(){...}
15.Métodos privados en interfaces
– Métodos no abstractos de la interface podrán
reutilizar código
// Constante
final Resource resource1 = new Resource("res1");
// Efectivamente constante
Resource resource2 = new Resource("res2");
//Antes...
try ( Resource r1 = resource1;
Resource r2 = resource2 ) {
// Uso de r1 y r2
}
// Con Java 9
try ( resource1; resource2 ) {
// Uso de resource1 y resource 2
}
v1Alexis López - aalopez@gmail.com - @aa_lopez
Mejoras en Depreciación (JEP 277)
16.. @deprecated
– JavaDocs
2. @Deprecated
– Marca código que no debería de ser usado (peligroso, mejores alternativas…)
3. Nuevos métodos
– forRemoval():boolean
● Indica si en algún punto el código será removido
● Solo se eliminará código haya sido marcado forRemoval = true en una versión anterior
– since():String
● Versión de Java desde la cual se marca como obsoleto
4. Nueva herramienta de análisis estático: jdeprscan
5. Omitir advertencias de código obsoleto en la sección de imports (JEP 211)
v1Alexis López - aalopez@gmail.com - @aa_lopez
21. Nuevo formato para versión de Java (JEP 223)
● Antes…
– Confuso
– 7u55 vs 7u60
● ¿Cuál tiene mayor cantidad de
correcciones por seguridad?
– 8u131 → java -version: 1.8.0_131
● A partir de Java 9…
● $MAJOR.$MINOR.$SECURITY
– Ejemplo: 9.0.0
– Fácil de entender
– Alineada con prácticas actualizadas:
Semantic Versioning
22. Runtime.Version
– Nueva API para obtener información de la versión
v1Alexis López - aalopez@gmail.com - @aa_lopez
23. G1 GC por defecto (JEP 248)
● Recolector de basura de baja pausa
– Bloquea menos la aplicación al hacer su trabajo
● En Java 8 se mejoró incluyendo una funcionalidad que permite
que sea usado por defecto en Java 9
– Maduro y estable
● Impacta directamente el rendimiento de las aplicaciones
– Pruebas son deseadas
v1Alexis López - aalopez@gmail.com - @aa_lopez
24. Logging Unificado (JEPs 158, 264, 271)
● Mecanismo de logging común para toda la JVM
● Reimplementación de logging en GC para usar el logging
unificado
● Posibilidad de configurar la plataforma para que use el mismo
framework de logging que la aplicación
v1Alexis López - aalopez@gmail.com - @aa_lopez
25. Estructura de archivos del JDK/JRE (JEP 220)
Antes…
├── bin
├── jre
│ ├── bin
│ └── ...
│ ├── lib
│ ├── rt.jar
│ └── ...
└── lib
│ ├── tools.jar
│ └── ...
└── ...
Antes…
├── bin
├── conf
├── jre
│ ├── bin
│ └── ...
│ ├── lib
│ ├── rt.jar
│ └── ...
└── lib
│ ├── tools.jar
│ └── ...
└── ...
v1Alexis López - aalopez@gmail.com - @aa_lopez
Mejoras en compatibilidad
26. Compilar para versiones
anteriores (JEP 247)
– source y target generan
ByteCode de la versión actual
– Javac --release N
– Limitante: Unicode
27. Archivos JAR para diferentes versiones (JEP 238)
– Clases especificas para diferentes versiones en
un mismo .jar
jar root
- A.class
- B.class
- C.class
- META-INF
- versions
- 9
- A.class
- B.class
v1Alexis López - aalopez@gmail.com - @aa_lopez
28. jShell (JEP 222)
● Nueva herramienta que permite escribir y ejecutar código java
R ead
E val
P rint
L oop
v1Alexis López - aalopez@gmail.com - @aa_lopez
29. Nuevos métodos en Colecciones (JEP 269)
● Permiten una fácil creación
de colecciones
– List, Set y Map
● Inmutables
● Métodos específicos para
0..10 elementos
– Versión varargs sin limites
// Antes...
Set<String> set = new HashSet<>();
set.add("a");
set.add("b");
set.add("c");
set = Collections.unmodifiableSet(set);
// Java 9...
Set<String> set = Set.of("a", "b", "c");
Map<String, Integer> m =
Map.of(
“Cali”, 1000,
“Bogotá”, 2200
);
v1Alexis López - aalopez@gmail.com - @aa_lopez
30. Mejoras en la API Process (JEP 102)
● Permite administrar y controlar
procesos del sistema operativo
● Limitaciones actuales obligan a crear
código nativo para el SO
● Nuevas adiciones permiten:
– Obtener info del proceso: Id,
argumentos, comando, hora inicio, etc.
– Monitorear y controlar procesos (sujeto a
permisos del SO)
//Process
long getPid()
ProcessHandle.Info info()
CompletableFuture<Process> onExit()
ProcessHandle toHandle()
//ProcessHandle
static Stream<ProcessHandle> allProcesses()
Stream<ProcessHandle> children()
static ProcessHandle current()
Stream<ProcessHandle> descendants()
boolean destroy()
boolean destroyForcibly()
boolean isAlive()
v1Alexis López - aalopez@gmail.com - @aa_lopez
31. Mejoras en concurrencia (JEP 266)
● Publish-subscribe framework (Reactive)
– Asíncronico, no-bloqueante
● Mejoras en CompletableFuture API
– Delays y Timeouts
– Creación fácil de clases hijas
v1Alexis López - aalopez@gmail.com - @aa_lopez
Limpieza
32. Eliminar demos/ejemplos (JEP 298)
– Desactualizados
– jdk/src/demo
– jdk/src/sample
34. Eliminar hprof (JEP 240)
– Nunca se visualizó como una herramienta para
producción
– Otras herramientas ofrecen sus funcionalidades
(ej: jmap, jcmd)
3. Eliminar jhat (JEP 241)
– Experimental
– Desactualizada
– Existen mejores herramientas para visualizar la
memoria
35.Eliminar selección de versión del JRE (JEP 231)
– Poco usado en la realidad
– Opción -version:release genera error
37.Eliminar algunas opciones del GC (JEP 214)
– Marcadas como obsoletas en Java 8
– Mejora el mantenimiento de código fuente
– Posibilidad de incompatibilidad
3. API Applet marcada como obsoleta (JEP 289)
– Poco usada
– Navegadores ya no soportan java plug-ins
v1Alexis López - aalopez@gmail.com - @aa_lopez
Limpieza
38. Deshabilitar Certificados SHA-1 (JEP 288)
– Nuevo mecanismo permite deshabilitarlos
– Problemas de seguridad (Collision Attacks)
– NIST recomienda no usarlo
40. APIs marcados como obsoletos (JEP 162)
– Presentan impedimentos para la modularización de la plataforma
– {add,remove}PropertyChangeListener en clases LogManager, Packer y Unpacker.
– DialogCallbackHandler
3. CMS GC marcado como obsoleto (JEP 291)
– Posible eliminación en futura versión
– -XX:+UseConcMarkSweepGC genera advertencia
– Se recomienda comenzar a usar -XX:+UseG1GC
v1Alexis López - aalopez@gmail.com - @aa_lopez
Recursos en línea
● OpenJDK 9
http://openjdk.java.net/projects/jdk9
v1Alexis López - aalopez@gmail.com - @aa_lopez
Comunidades Java

Más contenido relacionado

La actualidad más candente

Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slony
Johanna Mendez
 
Despliegue de aplicaciones PHP
Despliegue de aplicaciones PHPDespliegue de aplicaciones PHP
Despliegue de aplicaciones PHP
AlicantePHP
 
Postgre sql y_replicacion_slony_p
Postgre sql y_replicacion_slony_pPostgre sql y_replicacion_slony_p
Postgre sql y_replicacion_slony_p
edvin_marcelo
 
3 Tipos De Datos Cont
3 Tipos De Datos Cont3 Tipos De Datos Cont
3 Tipos De Datos Cont
UVM
 

La actualidad más candente (19)

Sandbox para ejercicios de programación
Sandbox para ejercicios de programaciónSandbox para ejercicios de programación
Sandbox para ejercicios de programación
 
Dbdeployer
DbdeployerDbdeployer
Dbdeployer
 
Alta Disponibilidad con PgPool-II
Alta Disponibilidad con PgPool-IIAlta Disponibilidad con PgPool-II
Alta Disponibilidad con PgPool-II
 
Maven Overview
Maven OverviewMaven Overview
Maven Overview
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
Cluster con postgresql
Cluster con postgresqlCluster con postgresql
Cluster con postgresql
 
Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slony
 
Taller plataformas tecnológicas ORACLE MSDOS Y UNIX
Taller plataformas tecnológicas ORACLE MSDOS Y UNIXTaller plataformas tecnológicas ORACLE MSDOS Y UNIX
Taller plataformas tecnológicas ORACLE MSDOS Y UNIX
 
Integrando sonar
Integrando sonarIntegrando sonar
Integrando sonar
 
Despliegue de aplicaciones PHP
Despliegue de aplicaciones PHPDespliegue de aplicaciones PHP
Despliegue de aplicaciones PHP
 
Postgre sql y_replicacion_slony_p
Postgre sql y_replicacion_slony_pPostgre sql y_replicacion_slony_p
Postgre sql y_replicacion_slony_p
 
Java 1.4 to java 6
Java 1.4 to java 6Java 1.4 to java 6
Java 1.4 to java 6
 
Tabla y Manual de instalación de PostgreSQL 9.5
Tabla y Manual de instalación de PostgreSQL 9.5Tabla y Manual de instalación de PostgreSQL 9.5
Tabla y Manual de instalación de PostgreSQL 9.5
 
Docker y PostgreSQL
Docker y PostgreSQLDocker y PostgreSQL
Docker y PostgreSQL
 
NetBeans para Java, C, C++
NetBeans para Java, C, C++NetBeans para Java, C, C++
NetBeans para Java, C, C++
 
Vagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoVagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de uso
 
Presentación de Postgresql 9.1
Presentación de Postgresql 9.1Presentación de Postgresql 9.1
Presentación de Postgresql 9.1
 
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
Magallanes, Herramienta de despliegue PHP sencilla y poderosa�Magallanes, Herramienta de despliegue PHP sencilla y poderosa�
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
 
3 Tipos De Datos Cont
3 Tipos De Datos Cont3 Tipos De Datos Cont
3 Tipos De Datos Cont
 

Similar a 40 Novedades de JavaSE 9

Lenguaje java
Lenguaje javaLenguaje java
Lenguaje java
Eli Diaz
 

Similar a 40 Novedades de JavaSE 9 (20)

Java 9, 10, 11 ,12, 13 and more
Java 9, 10, 11 ,12, 13 and moreJava 9, 10, 11 ,12, 13 and more
Java 9, 10, 11 ,12, 13 and more
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilón
 
Jenkins pipeline
Jenkins pipelineJenkins pipeline
Jenkins pipeline
 
Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...
Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...
Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...
 
Primeros pasos con java 9
Primeros pasos con java 9Primeros pasos con java 9
Primeros pasos con java 9
 
Spock
SpockSpock
Spock
 
JRuby al Rescate de J2EE
JRuby al Rescate de J2EEJRuby al Rescate de J2EE
JRuby al Rescate de J2EE
 
CommitConf 2019 - Micronaut y GraalVm: La combinación perfecta
CommitConf 2019 - Micronaut y GraalVm: La combinación perfectaCommitConf 2019 - Micronaut y GraalVm: La combinación perfecta
CommitConf 2019 - Micronaut y GraalVm: La combinación perfecta
 
Java 7- Java Day Guatemala
Java 7- Java Day GuatemalaJava 7- Java Day Guatemala
Java 7- Java Day Guatemala
 
sesion_01-JAVA.pdf
sesion_01-JAVA.pdfsesion_01-JAVA.pdf
sesion_01-JAVA.pdf
 
Programación con java en Eclipse
Programación con java en EclipseProgramación con java en Eclipse
Programación con java en Eclipse
 
Conociendo las tecnologías de TypeSafe (Primer meetup Scala Perú Nov 2015)
Conociendo las tecnologías de TypeSafe (Primer meetup Scala Perú Nov 2015)Conociendo las tecnologías de TypeSafe (Primer meetup Scala Perú Nov 2015)
Conociendo las tecnologías de TypeSafe (Primer meetup Scala Perú Nov 2015)
 
Lenguaje java
Lenguaje javaLenguaje java
Lenguaje java
 
JRuby Al Rescate J2EE
JRuby Al Rescate J2EEJRuby Al Rescate J2EE
JRuby Al Rescate J2EE
 
Lenguaje java
Lenguaje javaLenguaje java
Lenguaje java
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJS
 
DotNet 2019 | Pablo Santos Luaces - Como migrar un producto multiplataforma a...
DotNet 2019 | Pablo Santos Luaces - Como migrar un producto multiplataforma a...DotNet 2019 | Pablo Santos Luaces - Como migrar un producto multiplataforma a...
DotNet 2019 | Pablo Santos Luaces - Como migrar un producto multiplataforma a...
 
Jvmmx docker jvm
Jvmmx docker jvmJvmmx docker jvm
Jvmmx docker jvm
 
Metacoretex
MetacoretexMetacoretex
Metacoretex
 
Swift migration. the true history
Swift migration. the true historySwift migration. the true history
Swift migration. the true history
 

Más de Alexis Lopez

Más de Alexis Lopez (6)

Más allá de Git add/commit/push
Más allá de Git add/commit/pushMás allá de Git add/commit/push
Más allá de Git add/commit/push
 
ADF 12c como tu "Backend"
ADF 12c como tu "Backend"ADF 12c como tu "Backend"
ADF 12c como tu "Backend"
 
Lambdas y API Stream #PerúJUG #Java20
Lambdas y API Stream #PerúJUG #Java20Lambdas y API Stream #PerúJUG #Java20
Lambdas y API Stream #PerúJUG #Java20
 
Lambdas y API Stream - Apuntes de Java
Lambdas y API Stream - Apuntes de JavaLambdas y API Stream - Apuntes de Java
Lambdas y API Stream - Apuntes de Java
 
JSR354: Moneda y Dinero - Taller
JSR354: Moneda y Dinero - TallerJSR354: Moneda y Dinero - Taller
JSR354: Moneda y Dinero - Taller
 
JSR354: Moneda y Dinero
JSR354: Moneda y DineroJSR354: Moneda y Dinero
JSR354: Moneda y Dinero
 

Último

Último (11)

Caso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La SalleCaso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La Salle
 
MODULO BASICO DE WORD - I CICLO.DOC.DOC.
MODULO BASICO DE WORD - I CICLO.DOC.DOC.MODULO BASICO DE WORD - I CICLO.DOC.DOC.
MODULO BASICO DE WORD - I CICLO.DOC.DOC.
 
trabajo integrador final sofi y vane.docx
trabajo integrador final sofi y vane.docxtrabajo integrador final sofi y vane.docx
trabajo integrador final sofi y vane.docx
 
PSICOLOGÍA si quieres aprender los temas principales para el examen de admisión
PSICOLOGÍA si quieres aprender los temas principales para el examen de admisiónPSICOLOGÍA si quieres aprender los temas principales para el examen de admisión
PSICOLOGÍA si quieres aprender los temas principales para el examen de admisión
 
Escaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipoEscaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipo
 
Maquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdfMaquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdf
 
Los desafíos de calidad de software que nos trae la IA y los LLMs
Los desafíos de calidad de software que nos trae la IA y los LLMsLos desafíos de calidad de software que nos trae la IA y los LLMs
Los desafíos de calidad de software que nos trae la IA y los LLMs
 
experiencia de aprendizaje sobre lectura y escritura como herramientas de ap...
experiencia de aprendizaje sobre lectura y escritura como  herramientas de ap...experiencia de aprendizaje sobre lectura y escritura como  herramientas de ap...
experiencia de aprendizaje sobre lectura y escritura como herramientas de ap...
 
infografia del sena para analisis y desarrollo de software
infografia del sena para analisis y desarrollo de softwareinfografia del sena para analisis y desarrollo de software
infografia del sena para analisis y desarrollo de software
 
PitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitalesPitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitales
 
FICHA DE TRABAJO DE CREACION DE TABLAS EN WORD
FICHA  DE TRABAJO DE CREACION DE TABLAS EN WORDFICHA  DE TRABAJO DE CREACION DE TABLAS EN WORD
FICHA DE TRABAJO DE CREACION DE TABLAS EN WORD
 

40 Novedades de JavaSE 9

  • 1. v1Alexis López - aalopez@gmail.com - @aa_lopez Java 9 21 SEP 2017
  • 2. v1Alexis López - aalopez@gmail.com - @aa_lopez Acerca de...
  • 3. v1Alexis López - aalopez@gmail.com - @aa_lopez 40 novedades de JavaSE 9 21 SEP 2017 Lanzamiento Desarrollado 91JEPs
  • 4. v1Alexis López - aalopez@gmail.com - @aa_lopez JigSaw – Modularidad en JDK ● Organización de clases en módulos – 94 Módulos ● APIs restringidas son encapsuladas – sun.misc.Unsafe – Opciones para línea de comandos las habilitan nuevamente ● Impacta directamente las aplicaciones (APIs restringidas) – Pruebas son deseadas
  • 5. v1Alexis López - aalopez@gmail.com - @aa_lopez JigSaw – Modularidad en JDK class Console class String ... ... module java.base package java.io package java.lang class Connection module java.sql package java.sql ... modules... packages... JDK
  • 6. v1Alexis López - aalopez@gmail.com - @aa_lopez JigSaw – Modularidad en JDK java.base JDK java.logging java.sql java.xml Otros modulos Nuestras aplicaciones implicito explicito explicito implicito explicito explicito
  • 7. v1Alexis López - aalopez@gmail.com - @aa_lopez Mejoras en cadenas de texto (Strings) 1. Cadenas de texto más compactas (JEP 254) – Mejor uso de memoria ● 2 bytes/char → 1 byte/char (cuando se pueda) ● ISO-8859-1/Latin-1 – Reduce actividad del GC 2. Concatenación de cadenas (JEP 280) – ByteCode: concatenación estática (StringBuilder) → invokedynamic – Permite mejoras a futuro sin alterar javac
  • 8. v1Alexis López - aalopez@gmail.com - @aa_lopez Mejoras en cadenas de texto (Strings) //Los siguientes métodos son iguales en términos de su ByteCode static String saludo(String nombre) { return "Hola " + nombre; } static String saludo(String nombre) { return new StringBuilder().append("Hola " ).append(nombre).toString(); }
  • 9. v1Alexis López - aalopez@gmail.com - @aa_lopez Mejoras en cadenas de texto (Strings) static java.lang.String saludo(java.lang.String); Code: 0: new #2 // class java/lang/StringBuilder 3: dup 4: invokespecial #3 // Method java/lang/StringBuilder."<init>":()V 7: ldc #4 // String Hola 9: invokevirtual #5 // Method java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; 12: aload_0 13: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 16: invokevirtual #6 // Method java/lang/StringBuilder.toString:()Ljava/lang/String; 19: areturn
  • 10. v1Alexis López - aalopez@gmail.com - @aa_lopez Mejoras en cadenas de texto (Strings) //Java 9 usa invokeDynamic static java.lang.String saludo(java.lang.String); Code: 0: aload_0 1: invokedynamic #2, 0 // InvokeDynamic #0:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String; 6: areturn
  • 11. v1Alexis López - aalopez@gmail.com - @aa_lopez Mejoras en documentación (JavaDocs) 3.HTML5 (JEP 224) – Ahora javadoc puede generar código HTML5 ● Nuevo parámetro de ejecución indica el tipo a generar ● HTML4 continua siendo el tipo por defecto ● HTML5 será el tipo por defecto a partir de Java 10 2. Campo de búsqueda en la documentación (JEP 225)
  • 12. v1Alexis López - aalopez@gmail.com - @aa_lopez Adopción de nuevos estándares 5. Unicode 7.0 (JEP 227) – ~ 3000 Nuevos caracteres 5. Unicode 8.0 (JEP 267) – ~ 8000 Nuevos caracteres 6. SHA-3 (JEP 287) – Nuevo estándar para criptografía 7. DTLS (JEP 219) – Protocolo seguro para datagramas 9. PKCS12 Keystores (JEP 229) – Reemplaza a JKS – Extensible, estandarizado y ampliamente adoptado – Mecanismo de detección para asegurar compatibilidad 5. UTF-8 en .properties (JEP 226) – Ya no es necesario convertir texto a ISO-8859-1 ● Informaciu00F3n → Información
  • 13. v1Alexis López - aalopez@gmail.com - @aa_lopez Refinando Project Coin (JEP 213) 11.@SafeVarargs en métodos privados – Extiende los lugares donde puede ser usada 12.Variables efectivamente constantes en bloques try-con-recursos – Posibilidad de usar variables definidas por fuera del bloque sin definir una nueva 13.Guión de piso (_) no puede ser usado como identificador – Se reserva para futura funcionalidad 14.Operador diamante en clases anónimas – Comparator<String> c = new Comparator<>(){...} 15.Métodos privados en interfaces – Métodos no abstractos de la interface podrán reutilizar código // Constante final Resource resource1 = new Resource("res1"); // Efectivamente constante Resource resource2 = new Resource("res2"); //Antes... try ( Resource r1 = resource1; Resource r2 = resource2 ) { // Uso de r1 y r2 } // Con Java 9 try ( resource1; resource2 ) { // Uso de resource1 y resource 2 }
  • 14. v1Alexis López - aalopez@gmail.com - @aa_lopez Mejoras en Depreciación (JEP 277) 16.. @deprecated – JavaDocs 2. @Deprecated – Marca código que no debería de ser usado (peligroso, mejores alternativas…) 3. Nuevos métodos – forRemoval():boolean ● Indica si en algún punto el código será removido ● Solo se eliminará código haya sido marcado forRemoval = true en una versión anterior – since():String ● Versión de Java desde la cual se marca como obsoleto 4. Nueva herramienta de análisis estático: jdeprscan 5. Omitir advertencias de código obsoleto en la sección de imports (JEP 211)
  • 15. v1Alexis López - aalopez@gmail.com - @aa_lopez 21. Nuevo formato para versión de Java (JEP 223) ● Antes… – Confuso – 7u55 vs 7u60 ● ¿Cuál tiene mayor cantidad de correcciones por seguridad? – 8u131 → java -version: 1.8.0_131 ● A partir de Java 9… ● $MAJOR.$MINOR.$SECURITY – Ejemplo: 9.0.0 – Fácil de entender – Alineada con prácticas actualizadas: Semantic Versioning 22. Runtime.Version – Nueva API para obtener información de la versión
  • 16. v1Alexis López - aalopez@gmail.com - @aa_lopez 23. G1 GC por defecto (JEP 248) ● Recolector de basura de baja pausa – Bloquea menos la aplicación al hacer su trabajo ● En Java 8 se mejoró incluyendo una funcionalidad que permite que sea usado por defecto en Java 9 – Maduro y estable ● Impacta directamente el rendimiento de las aplicaciones – Pruebas son deseadas
  • 17. v1Alexis López - aalopez@gmail.com - @aa_lopez 24. Logging Unificado (JEPs 158, 264, 271) ● Mecanismo de logging común para toda la JVM ● Reimplementación de logging en GC para usar el logging unificado ● Posibilidad de configurar la plataforma para que use el mismo framework de logging que la aplicación
  • 18. v1Alexis López - aalopez@gmail.com - @aa_lopez 25. Estructura de archivos del JDK/JRE (JEP 220) Antes… ├── bin ├── jre │ ├── bin │ └── ... │ ├── lib │ ├── rt.jar │ └── ... └── lib │ ├── tools.jar │ └── ... └── ... Antes… ├── bin ├── conf ├── jre │ ├── bin │ └── ... │ ├── lib │ ├── rt.jar │ └── ... └── lib │ ├── tools.jar │ └── ... └── ...
  • 19. v1Alexis López - aalopez@gmail.com - @aa_lopez Mejoras en compatibilidad 26. Compilar para versiones anteriores (JEP 247) – source y target generan ByteCode de la versión actual – Javac --release N – Limitante: Unicode 27. Archivos JAR para diferentes versiones (JEP 238) – Clases especificas para diferentes versiones en un mismo .jar jar root - A.class - B.class - C.class - META-INF - versions - 9 - A.class - B.class
  • 20. v1Alexis López - aalopez@gmail.com - @aa_lopez 28. jShell (JEP 222) ● Nueva herramienta que permite escribir y ejecutar código java R ead E val P rint L oop
  • 21. v1Alexis López - aalopez@gmail.com - @aa_lopez 29. Nuevos métodos en Colecciones (JEP 269) ● Permiten una fácil creación de colecciones – List, Set y Map ● Inmutables ● Métodos específicos para 0..10 elementos – Versión varargs sin limites // Antes... Set<String> set = new HashSet<>(); set.add("a"); set.add("b"); set.add("c"); set = Collections.unmodifiableSet(set); // Java 9... Set<String> set = Set.of("a", "b", "c"); Map<String, Integer> m = Map.of( “Cali”, 1000, “Bogotá”, 2200 );
  • 22. v1Alexis López - aalopez@gmail.com - @aa_lopez 30. Mejoras en la API Process (JEP 102) ● Permite administrar y controlar procesos del sistema operativo ● Limitaciones actuales obligan a crear código nativo para el SO ● Nuevas adiciones permiten: – Obtener info del proceso: Id, argumentos, comando, hora inicio, etc. – Monitorear y controlar procesos (sujeto a permisos del SO) //Process long getPid() ProcessHandle.Info info() CompletableFuture<Process> onExit() ProcessHandle toHandle() //ProcessHandle static Stream<ProcessHandle> allProcesses() Stream<ProcessHandle> children() static ProcessHandle current() Stream<ProcessHandle> descendants() boolean destroy() boolean destroyForcibly() boolean isAlive()
  • 23. v1Alexis López - aalopez@gmail.com - @aa_lopez 31. Mejoras en concurrencia (JEP 266) ● Publish-subscribe framework (Reactive) – Asíncronico, no-bloqueante ● Mejoras en CompletableFuture API – Delays y Timeouts – Creación fácil de clases hijas
  • 24. v1Alexis López - aalopez@gmail.com - @aa_lopez Limpieza 32. Eliminar demos/ejemplos (JEP 298) – Desactualizados – jdk/src/demo – jdk/src/sample 34. Eliminar hprof (JEP 240) – Nunca se visualizó como una herramienta para producción – Otras herramientas ofrecen sus funcionalidades (ej: jmap, jcmd) 3. Eliminar jhat (JEP 241) – Experimental – Desactualizada – Existen mejores herramientas para visualizar la memoria 35.Eliminar selección de versión del JRE (JEP 231) – Poco usado en la realidad – Opción -version:release genera error 37.Eliminar algunas opciones del GC (JEP 214) – Marcadas como obsoletas en Java 8 – Mejora el mantenimiento de código fuente – Posibilidad de incompatibilidad 3. API Applet marcada como obsoleta (JEP 289) – Poco usada – Navegadores ya no soportan java plug-ins
  • 25. v1Alexis López - aalopez@gmail.com - @aa_lopez Limpieza 38. Deshabilitar Certificados SHA-1 (JEP 288) – Nuevo mecanismo permite deshabilitarlos – Problemas de seguridad (Collision Attacks) – NIST recomienda no usarlo 40. APIs marcados como obsoletos (JEP 162) – Presentan impedimentos para la modularización de la plataforma – {add,remove}PropertyChangeListener en clases LogManager, Packer y Unpacker. – DialogCallbackHandler 3. CMS GC marcado como obsoleto (JEP 291) – Posible eliminación en futura versión – -XX:+UseConcMarkSweepGC genera advertencia – Se recomienda comenzar a usar -XX:+UseG1GC
  • 26. v1Alexis López - aalopez@gmail.com - @aa_lopez Recursos en línea ● OpenJDK 9 http://openjdk.java.net/projects/jdk9
  • 27. v1Alexis López - aalopez@gmail.com - @aa_lopez Comunidades Java

Notas del editor

  1. Código fuente -&amp;gt; Debug más completo ADF Architecture -&amp;gt; Capitulos de todo tipo: desarrollo, arquitectura, mejores prácticas ADF EMG -&amp;gt; Grupo de expertos. Crearon proyectos open source como: Audit Rules, Taskflow tester... Comunidad Google+ -&amp;gt; Actualidad, blogs, artículos, etc OTN Forums -&amp;gt; Dudas? ADF Architecture Square -&amp;gt; Documentos enfocados a arquitectura y guías o estádnares de desarrollo que implementan buenas prácticas Oracle ADF Code Corner -&amp;gt; Enlaces de referencia a blogs, video tutoriales, casos resueltos inspirados por preguntas en el foro de ADF
  2. Código fuente -&amp;gt; Debug más completo ADF Architecture -&amp;gt; Capitulos de todo tipo: desarrollo, arquitectura, mejores prácticas ADF EMG -&amp;gt; Grupo de expertos. Crearon proyectos open source como: Audit Rules, Taskflow tester... Comunidad Google+ -&amp;gt; Actualidad, blogs, artículos, etc OTN Forums -&amp;gt; Dudas? ADF Architecture Square -&amp;gt; Documentos enfocados a arquitectura y guías o estádnares de desarrollo que implementan buenas prácticas Oracle ADF Code Corner -&amp;gt; Enlaces de referencia a blogs, video tutoriales, casos resueltos inspirados por preguntas en el foro de ADF