Páginas

miércoles, 26 de diciembre de 2012

Novedades en Java 7


Java 7 SE presenta novedades a tres niveles: APIs, lenguaje y JVM

1. Novedades en las APIs

1.1) Swing.
  • Se facilita la mezcla de AWT (componentes pesados) con Swing (componentes ligeros).
  • Se posibilitan ventanas con transparencias y con formas no cuadradas.
  • En el componente JColorChooser se habilita la posibilidad de seleccionar todo, saturación y luminusidad (Hue-Saturation-Luminance).
  • Aparece JLayer como decorador para componentes Swing.
  • La apariencia Nimbus se mueve de paquete.
1.2) IO y NIO
  • Gestionar un ZIP como si fuese un file system.
  • Las clases del paquete java.nio.* ofrecen mátodos más intuitivos para la gestión de ficheros y del sistema de archivo.
1.3) Seguridad
  • Soporta TLS 1.1 y TLS 1.2
  • Soporta renegociacion TLS (RFC 5746)
  • Ofrece un mecanismo para rechazar el uso de ciertos algoritmos (los considerados inseguros) en el procesado de rutas de certificación y en el handshaking TLS.
1.4) Concurrencia
  • Se ofrece el framework fork/join para facilitar el trabajo en paralelo (multiporcesador) con un pool de workers.
1.5) Rich Internet Applications (RIA)/Deployment
  • Embedding JNLP File in Applet Tag. Hasta la fecha a la hora de desplegar un applet mediante JNLP, el cliente primero se descargaba el fichero JNLP y luego el jar del app,let con sus dependencias. Ahora podemos incluir el fichero JNLP en el propio JAR del applet así se reduce una llamada y la carga es algo más rápida.
  • Deploying without Codebase. Hasta la fecha en los ficheros JNLP se debía especificar el parámetro Codebase, con Java 7 este parámetro es opcional, si no se indica nada Java Web Start asume que el codebase es relativo a la página web desde la que se lanza la aplicación.
  • Handling Applet Initialization Status with Event Handlers. Cualquier llamada desde JavaScript a un método o a una variable de un applet queda bloqueada hasta que termina el método init() del applet, como además JavaScript no es multihilo, la página web puede parecer congelada durante algunos segundos. Con Java 7 SE, podemos controlar desde JavaScript el estado de carga del applet, si el applet no está cargado podemos registrar los eventos para que se lancen cuando termine de cargarse.
1.6) XML, JAXP, JAXB y JAX-WS
  • Soporta JAXP 1.4.5 (Java API for XML Processing)
  • Soporta JAXB 2.2.3 (Java Architecture for XML Binding)
  • Soporta JAX-WS 2.2.4 (Java API for XML Web Services)
1.7) Internacionalización
  • Soporte de Unicode 6
  • Soporte de para los códigos de monedas ISO 4217
  • Mejoras en el Locale.Category (DISPLAY/FORMAT)
  • Soporte para BCP47 y UTR35 en Locale
   
2. Novedades en el lenguaje

2.1) Podemos manejar literales binarios, hasta ahora sólo se podía con hexadecimales, octales, etc.

        System.out.println("numero "+ 0b1010);

2.2) Se permiten sentencias switch con Strings.

         String dia="lunes";
         switch(dia){
            case "lunes":    System.out.println("Lunes"); break;
            case "martes":     System.out.println("Martes"); break;
            case "miercoles": System.out.println("Miércoles"); break;
            case "jueves":    System.out.println("Jueves"); break;
            case "viernes": System.out.println("Viernes"); break;
            default:        System.out.println("Fin de semana");
        }


2.3) Manejo automático de recursos en try/catch. Se cierran automáticamente archivos, conexiones a bases de datos, etc.

        try(BufferedWriter writer=new BufferedWriter(new FileWriter("/opt/nombreapp/salida/resultado.txt"))) {
               writer.writeln(datos);
        } catch(IOException ex) {
               ex.printStackTrace();
        }


2.4) Captura múltiple de excepciones.

        try {
            System.out.println(10/Integer.parseInt(numero));
        } catch(ArithmeticException | NumberFormatException ex) {
            //manejamos conjuntamente ambas excepciones
        }


2.5) Números con guiones.

        System.out.printf("número: %d%n",1_000);

2.6) Simplificación en el uso de genéricos. Se permiten cosas como:

        List<String> list=new ArrayList<>();

    en vez de:
   
        List<String> list=new ArrayList<String>();

3. Novedades en la JVM

3.1) La JVM soporta lenguajes no java. Java es un lenguaje donde los tipos de datos se verifican en la compilación. Hay otros lenguajes de programación donde los tipos de datos se verifican durante la ejecución, por ejemplo javaScript. Se introduce la nueva instrucción invokedynamic que simplifica y la implementación de compiladores para lenguanes dinámicos en la JVM.

3.2) Garbage-First Collector (o G1 Collector) es una nueva reimplementación del garbage collector orientada a servidores con alto consumo de memoria y multiprocesador. Es interesante su uso en servidores cuando se den una o varias de las siguientes condiciones:
  • Más del 50% de la heap está ocupada con datos activos.
  • Cuando salta el garbage collectior tarda entre 0.5 y 1 seg.
3.3) La JVM HotSpot presenta mejoras de rendimiento:
  • Compilación por capas (Tiered Compilation). Java es "interpretado" en tanto en normalmente ejecuta bytecode y no código máquina, por ello es mas lento. Para solventar esta debilidad, desde la versión 1.3 la JVM HotSpot incorpora JIT         (just-in-time compilation), que compila el bytecode a código máquina antes de ejecutar las clases. Hotspot tiene dos JIT: client JIT y server JIT. El Modo Client del JIT permite arranques más rápidos, pero con menos optimizaciones que el modo Server, que sin embargo arranca más despacio. "Tiered Compilation" tiene lo mejor de los dos compiladores, las optimizaciones del modo Server con la rapidez de arranque del modo Client. Esta mejora puede aplicarse tanto en servidores como en el eclipse.ini.
  • Punteros java comprimidos (Compressed Oops). Los Oop (ordinary object pointer) son los punteros Java a los objetos. Éstos punteros son de 32 o 64 bits según la arquitectura de la máquina. Con 32 bits el tamaño del heap (pila) es menor de 4GB que puede ser poroc para ciertas aplicaciones. Con 64 bits el tamaño del heap es mucho mayor, pero si el aplicativo no necesita realmente ese espacio extra estamos perdiendo memoria. Esta novedad permite usar direcciones de 32 bits aún siendo una arquitectura de 64 bits (una paginación) y ahorrar así memoria. En Java 7 SE, oops es la opción por defecto con JVM de 64-bit si no especificamos un valor para -Xmx o si se especifica un valor inferior a los 32GB.
  • Análisis del alcance de las variables. Otra novedad es el llamado Escape Analysis, mediante esta funcionalidad el compilador JIT de la JVM analiza el alcance de las variables y decide si interesa ubicarlas o no en el heap.
  • NUMA Collector Enhancements. Hoy en día los ordenadores vienen equipados con arquitectura NUMA (Non Uniform Memory Access). Cada rocesador tiene su propia memoria local rápida (como una caché). Java incorpora el NUMA Collector para colocar las variables definidas por cada hilo de un aplicativo en la memoria del procesador que ejecuta ese hilo, así normalmente se aceleran los accesos a memoria y la velocidad de ejecución es mayor.
Notas

Java 7 SE (Standard Edition) se compone de JDK y JRE (como cualquier versión anterior de Java).
  • JRE (Java Runtime Environment). Versión recomendada para la ejecución de aplicaciones Java y applets.
  • JDK (Java Development Kit). Versión recomendada para desarrollar aplicaciones Java y applets. Incorpora el JRE.
Referencias

http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html

No hay comentarios:

Publicar un comentario