Java 7

El 28 de julio de 2011, 4 años, 7 meses y 17 días después de la última gran actualización del lenguaje, se lanzó Java7.

Un lanzamiento envuelto en polémica puesto que, cinco días antes del lanzamiento, se descubrió un bug que afectaba a la correcta ejecución de bucles en la JVM HotSpotOracle decidió no posponer el lanzamiento oficial y sugirió, como solución temporal, la desactivación de la opción de optimización de compilación que causaba el error y que venía activada por defecto.

Más allá de las inevitables flamewars, los trolls que esperan cualquier oportunidad para recordar que Java es legacy y las desafortunadas confusiones entre un bug de una máquina virtual y toda una actualización principal de una tecnología, Java7 es un impulso decidido para la transformación de Java en una plataforma, más allá de un lenguaje.

[quote]Java7 supone uno de los mayores acontecimientos del año en el mundo del desarrollo de software y su lanzamiento afecta tanto a programadores Java como al resto de desarrolladores[/quote]

Después de todo el ruido que acompañó al lanzamiento, quedan las novedades que no nos debemos perder:

  • Mayor soporte a los lenguajes dinámicos ejecutados en la JVM. Ya hay más de 240 lenguajes soportados por la máquina virtual de Java que se benefician del robusto sistema de seguridad, el eficiente garbage collector y la amplia disponibilidad de la misma. Usando la JVM, por ejemplo, el equipo de JRuby consiguió doblar el rendimiento de la implementación estándar en C. Pero la especificación de bytecodes, los ejecutables de la JVM, no estaba preparada para soportar lenguajes dinámicos. Hasta ahora, ese soporte se ha realizado mediante métodos de simulación a través de la API de reflexión de Java. Aunque esta aproximación funciona, supone una ralentización considerable del tiempo de ejecución y un aumento de complejidad. En vez de enriquecer esta API, la aproximación de Oracle ha sido hacer cambios a nivel de JVM, añadiendo una nueva instrucción “invokedynamic” al juego de instrucciones de la máquina virtual y creando una nueva forma de invocar a métodos. Esto ha formado parte del denominado Proyecto Máquina de Da Vinci.
  • El Proyecto Coin. El Proyecto Coin fue una iniciativa de Joe Darcy para introducir pequeños cambios en la sintaxis del lenguaje que simplificaran tareas del día a día. De la lista de propuestas, cinco han sido implementadas en Java7:
    • Permite el uso de String como valores evaluables en bloques SWITCH
    • Cierre automático de conexiones a BBDD, ficheros, sockets…
    • Reducción de la verbosidad en la creación de instancias genéricas
    • Invocación simplificada de métodos con argumentos variables
    • Soporte sintáctico para el trabajo con lenguajes dinámicos
  • Números binarios literales y guiones bajos en literales. Los binarios se pueden declarar con el prefijo 0b o con 0B y el uso de guiones bajos en literales se introduce para mejorar la legibilidad del código, por ejemplo, a la hora de declarar el número de una tarjeta de crédito o un teléfono.
  • Mejora y actualización de las APIs de lectura y escritura (NIO.2), que ahora permiten operaciones asíncronas de lectura y escritura para mejorar la escalabilidad de las operaciones, gestión de permisos POSIX, objetos para el trabajo específico con ficheros zip/jar, configuración y gestión de trabajo consockets a nivel de canal con la implementación de NetworkChannel o el envío y recepción de datagramas con Multicast.

Estas son solo algunas de las novedades que encontraremos, pero podéis leer la lista completa de nuevas funcionalidades y mejoras aquí.

Evidentemente, no todo son buenas noticias. Probablemente, haya que esperar un par de actualizaciones para que se arreglen algunos bugs normales en desarrollos de semejante embergadura y los usuarios de Mac aún tendremos que esperar antes de poder disfrutarla -podéis seguir el progreso de la portabilidad a OS X- pero Java7 supone uno de los mayores acontecimientos del año en el mundo del desarrollo de software y, su lanzamiento, afecta tanto a programadores Java como al resto de desarrolladores.

La plataforma Java sigue en buena forma y eso es una gran noticia para toda la industria informática. ¡Bienvenida Java7!

¡BOLA EXTRA!

2 comments

  1. Oscar Campos 15 agosto, 2011 at 10:54 am

    Reply

    Lo de la mejora del soporte a lenguajes dinámicos que se ejecutan sobre la máquina virtual es bastante interesante.

    ¿Conoces algún benchmark enfrentando la implementación en C de Python y Jython sobre Java 7 David?

    Un saludo.

    • David Bonilla 15 agosto, 2011 at 4:33 pm

      Reply

      La verdad es que no Oscar y, lo reconozco, mis conocimientos sobre Python tienden a… cero. Pero en esta comparativa sostienen que Jython 2.5.2 es más rápido que la implementación original en C de la misma forma que reconocen que probaron Java7 para comprobar si había un rendimiento dramático en el rendimiento y no fue así.

      http://strattonbrazil.blogspot.com/2011/08/performance-gains-in-jython-252.html

      Evidentemente, son los desarrolladores de Jhyton los que tienen que utiliza las mejoras de Java7 -como el famoso invokeDynamic para que ese aumento de rendimiento se haga patente. Por hacer un símil  es como creer que un programa de DOS va a correr más rápido en un procesador multinucleo porque si.

Leave a reply

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>