Trending

10/recent/ticker-posts

Historia de Java



Publicado por: Aldo Alonso


Java, ¿Que es Java?, ¿Cuál es su historia?, quizás llegaste hasta aquí para saber más acerca de este maravilloso lenguaje de programación, llegaste al lugar indicado, su historia, sus inicios las diversas técnologias que componene al lenguaje; todo esto y mucho más te lo presentamos en este post supercompleto, te aseguramos que te gustara y resultará de mucha utilidad la información que te presentamos. Vamos adelante!!.



En Diciembre de 1950 Patrick Naughton, ingeniero de Sun Microsystems, reclutó a varios colegas entre ellos James Gosling y Mike Sheridan para trabajar sobre un nuevo proyecto conocido como "El proyecto verde".


Con la ayuda de otros ingenieros, empezaron a trabajar en una pequeña oficina en Sand Hill Road en Menlo Park, California. Y así interrumpió todas las comunicaciones regulares con Sun y trabajó sin descanso durante 18 meses.


Su propósito era Intentar desarrollar una nueva tecnología para programar la siguiente generación de dispositivos inteligentes, en los que Sun veía un campo nuevo a explorar. Crear un lenguaje de programación fácil de aprender y de usar. 


En un principio se consideraba C++ como lenguaje a utilizar, pero tanto Gosling como Bill Joy lo encontraron inadecuado. el código compilado era ineficiente para otros procesadores y tuvo que ser recompilado. Entonces, el equipo de 5 también llamado Green Team comenzó a trabajar en el desarrollo de una solución más fácil y rentable Gosling intentó primero extender y modificar C++ resultando el lenguaje C++ ++ - (++ - porque se añadían y eliminaban características a C++), pero lo abandonó para crear un nuevo lenguaje desde cero al que llamo Oak (roble en inglés, según la versión mas aceptada, por el roble que veía através de la ventana de su despacho).


El resultado fue un lenguaje que tenía similitudes con C, C++ y Objetive C y que no estaba ligado a un tipo de CPU concreta. 


Mas tarde, se cambiaría el nombre de Oak a Java, por cuestiones de propiedad intelectural, al existir ya un lenguaje con el nombre de Oak. Se supone que le pusieron ese nombre mientras tomaban café (Java es nombre de un tipo de café, originario de Asia), aunque otros afirman que el nombre deriva de las siglas de James Gosling, Arthur Van Hoff, y Andy Bechtolsheim



Al mismo tiempo, Internet y WWW se estaban volviendo populares día a día. Los programas web carecían de las características de independencia de la plataforma. Requería programas que pudieran ejecutarse en cualquier sistema operativo independientemente de la configuración de hardware y software. Requería programas pequeños y portátiles que pudieran ser transportados de forma segura a través de la red. El lenguaje de programación disponible para satisfacer tales requisitos era Java. Muchos desarrolladores pronto se dieron cuenta de que el lenguaje arquitectónico neutral como Java sería el mejor para escribir programas para internet. Por lo tanto, el foco de Java se desplazó de la electrónica de consumo a la World Wide Web. Hoy, Java no es un lenguaje de programación común. Es una tecnología simple, orientada a objetos, distribuida, robusta, segura, neutral en arquitectura, portátil, interoperada, multiproceso, alto rendimiento y dinámica.


Para 1992, el equipo ya había desarrollado un sistema en un prototipo llamado Star7 (*7), dispositivo parecido a una PDA, cuyo nombre venía de la combinación de teclas del teléfono de la oficina del Proyecto Green que permitía a los usuarios responder al teléfono desde cualquier lugar.


Por su parte, el presidente de la compañía Sun, Scott McNealy, se dio cuenta de forma oportuna y estableció elProyecto Verde como una subsidiaria de Sun.


Después de mostrar a Scott McNealy y Bill Joy los prototipos de bajo nivel del sistema, continuán con el desarrollo, incluyendo sistema operativo, Green OS; el lenguaje Oak, las librerías, alguna aplicación básica y el hardware, hasta que el 3 de septiembre de 1992 se termina el desarrollo y con ello el Proyecto Verde.


De 1993 a 1994, el equipo de Naughton se lanzó en busca de nuevas oportunidades en el mercado, mismas que se fueron dando mediante el sistema operativo base.


La incipiente subsidiaria fracasó en sus intentos de ganar una oferta con Time-Warner, sin embargo el equipo concluyó que el mercado para consumidores electrónicos smart y las cajas Set-Up en particular, no eran del todo eficaces. La subsidiaria Proyecto verde fue amortizada por la compañía Sun a mediados de 1994.


Patrick Naughton procedió a la construcción del lenguaje de programación Java que se accionaba con un browser prototipo. El 29 de septiembre de 1994 se termina el desarrollo del prototipo de HotJava. Cuando se hace la demostración a los ejecutivos de Sun, esta vez, se reconoce el potencial de Java y se acepta el proyecto.


Con el paso del tiempo HotJava se convirtió en un concepto práctico dentro del lenguaje Java y demostró que podría proporcionar multiplataformas para que el código pueda ser bajado y corrido del Host del World Wide Web y que de otra forma no son seguros. 


Una de las características de HotJava fue su soporte para los "applets", que son las partes de Java que pueden ser cargadas mediante una red de trabajo para después ejecutarlo localmente y así lograr soluciones dinámicas en computación acordes al rápido crecimiento del ambiente WEB.


El 23 de mayo de 1995, en la conferencia SunWorld `95, John Gage, de Sun Microsystems, y Marc Andreessen, cofundador y vicepresidente de Netscape, anunciaban la versión alpha de Java, que en ese momento solo corría en Solaris, y el hecho de que Java iba a ser incorporado en Netscape Navigator, el navegador mas utilizado de Internet.


Con la segunda alpha de Java en Julio, se añade el soporte para Windows NT y en la tercera, en Agosto, para Windows 95. 


En enero de 1995 Sun formá la empresa Java Soft para dedicarse al desarrollo de productos basados en la tecnologías Java, y así trabajar con terceras partes para crear aplicaciones, herramientas, sistemas de plataforma y servicios para aumentar las capacidades del lenguaje. Ese mismo mes aparece la versión 1.0 del JDK.


Netscape Communications decide apoyar a Java applets en Netscape Navigator 2.0. Ese fue el factor clave que lanzó a Java a ser conocido y famoso. 


Y como parte de su estrategia de crecimiento mundial y para favorecer la promoción de la nueva tecnología, Java Soft otorgó permisos para otras compañías para que pudieran tener acceso al código fuente y al mismo tiempo mejorar sus navegadores. 


También les permitía crear herramientas de desarrollo para programación Java y los facultaba para acondicionar máquinas virtuales Java (JVM), a varios sistemas operativos.


Muy pronto las licencias o permisos contemplaban prestigiosas firmas como: IBM, Microsoft, Symantec, Silicon Graphics, Oracle, Toshiba y Novell.


Los apples Java (basados en JDK 1.02) son apoyados por los dos más populares navegadores web (Nestcape Navigator 3.0 y Microsoft Internet Explorer 3.0. I.B.M./Lotus, Computer Asociates, Symantec, Informix, Oracle, Sybase y otras poderosas empresas de software están construyendo Software 100% puro JAVA.


Los nuevos proyectos de Java son co-patrocinados por cientos de millones de dólares en capital disponible de recursos tales como la Fundación Java, un fondo común de capital formado el verano pasado por 11 compañías, incluyendo Cisco Systems, IBM, Netscape y Oracle.


Java es la forma principal de producir código que se implementa como código de bytes en una máquina virtual Java (JVM); Los compiladores de código de bytes también están disponibles para otros lenguajes de programación, incluidos Ada, JavaScript, Python y Ruby. Además, se han diseñado varios lenguajes para que se ejecuten de forma nativa en JVM, incluidos Scala, Clojure y Apache Groovy. La sintaxis de Java toma mucho de C y C++, pero las características orientadas a objetos se modelan después.


Java evita ciertas construcciones de bajo nivel como punteros y tiene un modelo de memoria muy simple donde los objetos se asignan en el montón (mientras que algunas implementaciones, por ejemplo, todas actualmente compatibles con Oracle, pueden usar la optimización de análisis de escape para asignar en la pila) y todas las variables de tipos de objetos son referencias. La administración de la memoria se maneja a través de la recolección automática integrada de basura realizada por la JVM.


El 13 de noviembre de 2006, Sun Microsystems hizo que la mayor parte de su implementación de Java estuviera disponible bajo la Licencia Pública General (GPL) de GNU. 


La versión actual y única de soporte a largo plazo (LTS) es Java 8, y Java 10 es la única versión de lanzamiento rápido compatible. Oracle recomendó que los usuarios de Java SE 9 se actualicen a Java SE 9.0.4, que fue la actualización de seguridad final en marzo de 2018, y desde entonces Java 9 ya no es compatible, por lo que Oracle aconseja a sus usuarios "realizar una transición inmediata" a Java 10. Oracle (y otros) han anunciado que el uso de versiones anteriores (que no sean Java 8) de su implementación de JVM presenta riesgos graves, debido a problemas de seguridad no resueltos. Java 6 ( y 7 tuvieron la última actualización de seguridad no pública en abril de 2018 (julio y octubre), y el soporte extendido para Java 6 finalizará en diciembre de este año (2018).



  • Java como plataforma


Para aportar un concepto mas acerca de lo que es Java podríamos decir que es un conjunto de programas que facilita el desarrollo y la ejecución de programas. que incluye un motor de ejecución (llamado máquina virtual ), un compilador y un conjunto de bibliotecas; también puede haber servidores adicionales y bibliotecas alternativas que dependen de los requisitos. Java no está creado para un único sistema en especifico de ningún procesador o sistema operativo ya que se ha implementado para una amplia variedad de hardware y sistemas operativos con el fin de permitir que los programas Java se ejecuten de manera idéntica en todos ellos.



  • Ediciones Java
Diferentes plataformas se dirigen a diferentes clases de dispositivos y dominios de aplicación A continuación las presentamos:


Java Card
Evolución de la tecnología Java Card.



Es una tecnología que permite ejecutar pequeñas aplicaciones ( applets ) basadas en Java de forma segura en tarjetas inteligentes y dispositivos similares de memoria pequeña.
Java Card se introdujo en 1996. Fue un concepto pionero por el momento (el primer marco de trabajo de Java muy pequeño, antes de que se introdujera Java ME), y también era muy incompleto (sin especificación de VM y solo un marco criptográfico básico). Las versiones posteriores alterarían la arquitectura y aumentarían las API, hasta el punto de que el moderno marco de Java Card sería irreconocible para los usuarios de esa primera versión


Un contribuidor clave y promotor de esa evolución ha sido el Java Card Forum. JCF se formó poco después del lanzamiento inicial de Java Card como "una colaboración de compañías de la tarjeta inteligente, sistema operativo seguro e industria segura de silicio, trabajando juntas para promover y desarrollar Java como el lenguaje de programación preferido para tarjetas inteligentes de aplicaciones múltiples". y dispositivos seguros ".



JCF proporciona recomendaciones a Oracle para la evolución de las especificaciones de la tarjeta Java. Ha sido fundamental traer innovaciones clave a la plataforma. Después de que la versión 2.0 comenzó a especificar las condiciones de Java Card VM y Runtime, la versión 2.1 trajo un formato de archivo interoperable. La versión 2.2 se alineó con ETSI y permitió el soporte de tarjetas inteligentes sin contacto. La versión 3.0 introdujo 2 variantes de la especificación (Classic y Connected), así como un soporte de criptografía más amplio. Las versiones más recientes han continuado mejorando iterativamente la plataforma, hasta la versión actual Java Card 3.0.5 .

JCF ahora está trabajando con Oracle hacia la definición de una nueva versión, 3.1, que habilitará nuevos casos de uso en el espacio de IoT. El cual Esta programado para el lanzamiento en 2018.



Java Micro Edition (Java ME)


La plataforma Java Micro Edition (Java ME), o anteriormente Java 2 Micro Edition (J2ME), es una especificación de un subconjunto de la plataforma Java orientada a proveer una colección certificada de APIs de desarrollo de software para dispositivos con recursos restringidos como dispositivos móviles, PDA, decodificadores de televisión e impresoras.
Especifica varios conjuntos diferentes de bibliotecas (conocidos como perfiles) para dispositivos con capacidad limitada de almacenamiento, visualización y potencia. 
Java ME fue desarrollado mediante el Java Community Process bajo la especificación JSR 68. La evolución de la plataforma ha propiciado el abandono de las Java Specification Request (peticiones de especificación para Java) en favor de JSRs separadas para las distintas versiones de Java ME.
también incluye interfaces de usuario flexibles, seguridad sólida, protocolos de red incorporados y soporte para aplicaciones en red y fuera de línea que se pueden descargar dinámicamente. Las aplicaciones basadas en Java ME son portátiles en muchos dispositivos, pero aprovechan las capacidades nativas de cada dispositivo.

Como está formada una aplicación en Java ME?

Una aplicación Java ME típica está formada por un archivo JAR, que es el que contiene a la aplicación en sí, y un archivo opcional JAD (Java Archive Descriptor) que contiene diversa información sobre la aplicación. Antes de desarrollar una aplicación en Java ME, es necesario tomar una serie de decisiones según el dispositivo a utilizar y las necesidades requeridas. No todos los desarrollos realizados en Java ME utilizan los mismos componentes. En concreto, una aplicación en Java ME se desarrolla a partir de una combinación de:


Máquina virtual: Existen dos máquinas virtuales de Java ME con diferentes requisitos, cada una pensada para tipos distintos de pequeños dispositivos: KVM (Kilobyte Virtual Machine) y CVM (Compact Virtual Machine).

Configuración: Una configuración consiste en un conjunto de clases básicas destinadas a conformar el corazón de la aplicación. En concreto, dentro de Java ME existe dos configuraciones: CLDC (Connected Limited DeviceConfiguration) y CDC (Connected Device Configuration).

Perfil: Bibliotecas de clases específicas, orientadas a implementar funcionalidades de más alto nivel para familias específicas de dispositivos.

 Cada una de las dos configuraciones mencionadas requiere en realidad de una determinada máquina virtual. De esta forma, si se escoge la configuración CLDC, será necesario utilizar la máquina virtual denominada KVM; si, por el contrario, se decide utilizar la configuración CDC, la máquina virtual necesaria es la conocida como CVM.

Con la elección de perfiles, se da una situación similar. Existen unos perfiles que se utilizan sobre la configuración CDC (Foundation Profile, Personal Profile y Personal Basis Specification) y otros que lo hacen sobre CLDC (Mobile Information Device Profile, conocido como MIDP,y Information Module Profile).
Las aplicaciones en Java ME que se realizan utilizando el perfil MIDP (The Mobile Information Device Profile) o Perfil de dispositivo  de información movil, reciben el nombre de MIDlets. Se dice así que un MIDlet es una "aplicación Java ME realizada con el perfil MIDP", sobre la configuración CLDC, y usando la máquina virtual KVM. Desde un punto de vista práctico, MIDP  es único perfil actualmente disponible.

 Al desarrollar una aplicación en Java ME bajo el perfil MIDP, el programador puede hacer uso, de las siguientes bibliotecas, claro que hay muchas más,  pero aquí solo mencionaremos las más utilizadas


  • Librerías
Nombre
Descripción

java.io
--Operaciones de E/S básicas


java.lang
--Operaciones de la máquina virtual


java.util
--Utilidades estándar


javax.microedition.midlet
--Marco de ejecución para las aplicaciones


javax.microedition.lcdui
--Interfaces de usuario


javax.microedition.rms
--Almacenamiento persistente en el dispositivo


javax.microedition.io
--Conexión genérica



A través de la configuración CLDC, se obtienen un conjunto de clases heredadas de la edición Java SE. Aproximadamente, unas 37 clases derivadas de los paquetes java.lang, java.util y java.io. Cada clase es un subconjunto de la correspondiente en Java SE. Los paquetes java.io y java.net, son los encargados en Java SE de las operaciones de E/S. Debido a las limitaciones de CLDC, no fue posible incluir todas y cada una de las clases de estos paquetes. Tampoco se incluyeron la clase java.net, encargada de las comunicaciones TCP/IP. En su lugar, MIDP añade el paquete javax.microedtion.io que suple de forma genérica las necesidades en cuestiones de comunicación. Además de los ya mencionados, MIDP incluye también un paquete que posibilita la creación de interfaces de usuario: javax.microedition.lcdui. Las clases contenidas en este paquete pueden dividirse en dos grandes grupos:


Elementos de interfaz de usuario de alto nivel: Esta interfaz usa componentes tales como cajas de texto, alertas, listas, etc. Estos elementos son implementados por cada dispositivo y la finalidad de usar las APIs de alto nivel es su portabilidad.


Elementos de interfaz de usuario de bajo nivel: Se tiene un control total sobre los recursos, pero se puede perder la portabilidad ya que dependerá mucho del dispositivo destino. Generalmente, se utiliza en juegos.

El paquete javax.microedition.rms proporciona un mecanismo a los MIDlets para poder almacenar información de forma persistente en el dispositivo, utilizando para ello una base de datos basada en registros llamada Record Management System o RMS. Los registros se convierten así en la unidad básica de información en un MIDlet, permitiendo al dispositivo crear, leer, modificar y borrar cualquier registro de datos.


  • Comunicaciones en MIDlets 
Anteriormente se ha mencionado que el paquete javax.microedition.io contiene las clases que dan soporte a las comunicaciones en una aplicación MIDP. De hecho, este paquete pretende sustituir, de una forma más breve y concisa, al paquete java.net de Java SE. Sin embargo, en una comunicación el MIDlet no utiliza únicamente este paquete, sino que también usará java.io, añadido por la configuración CLDC. Mientras que el paquete javax.microedtion.io tiene como misión crear y manejar diferentes conexiones de red (por HTTP, datagramas, sockets), el paquete java.io lo que posibilita a través de su declaración de clases es poder leer y escribir en estas conexiones de red. Debido a las limitaciones ya conocidas de un dispositivo basado en MIDP, es del todo imposible contener en él la implementación de cada protocolo de comunicación existente.
Lo que proporciona  javax.microedition.io es una única clase, llamada Connectorque esconde todos los detalles de la conexión. Dicho en otras palabras, una misma clase Connector sirve tanto para leer archivos, como abrir una conexión por HTTP o mediante sockets




Java Standard Edition (Java SE)




Java SE (Standard Edition): Es una plataforma informática para el desarrollo y la implementación de códigos portátiles para entornos de escritorio y servidores. Java SE anteriormente se conocía como Java 2 Platform, Standard Edition ( J2SE ).
La plataforma usa lenguaje de programación Java y es parte de la familia de plataforma de software Java. define una gama de API de propósito general, como las API de Java para la Biblioteca de clases también incluye la especificación de lenguaje y la especificación de máquina virtual de Java. Una de las implementaciones más conocidas de Java SE es el Java Development Kit (JDK) de Oracle Corporation .


J2SE 1.2


Nombre clave: Playground, Su lanzamiento fue el 8 de diciembre de 1998 y las versiones posteriores a través de J2SE 5.0 se cambiaron retrospectivamente a Java 2 y el nombre de la versión "J2SE" ( plataforma Java 2, edición estándar ) sustituyó a JDK para distinguir la plataforma base de J2EE (plataforma Java 2, Enterprise Edition ) y J2ME ( Java 2 Platform, Micro Edition ). Esta fue una versión muy significativa de Java, ya que triplicó el tamaño de la plataforma Java a 1520 clases en 59 paquetes.

Principales adiciones incluidas:
  • strictfp palabra clave
  • la API gráfica de Swing se integró en las clases principales
  • La JVM de Sun estaba equipada con un compilador JIT por primera vez
  • Plug-in de Java
  • Java IDL , una implementación de IDL para la interoperabilidad CORBA
  • Marco de colecciones


J2SE 1.3 

Nombre clave Kestrel . Los cambios más notables en el lanzamiento del 8 de mayo de 2000 fueron:
  • HotSpot JVM incluido (el HotSpot JVM se lanzó por primera vez en abril de 1999 para J2SE 1.2 JVM)
  • RMI se modificó para admitir compatibilidad opcional con CORBA
  • Interfaz de nombres y directorios de Java (JNDI) incluida en las bibliotecas principales (anteriormente disponible como extensión)
  • Arquitectura de Depurador de Plataforma Java (JPDA)
  • JavaSound
  • Clases de proxy sintético


J2SE 1.4 

Nombre clave Merlin . Su lanzamiento fue el 6 de febrero de 2002 este fue el primer lanzamiento de la plataforma Java desarrollada bajo Java Community Process como JSR 59.


Cambios principales incluidos:


  • Cambios de idioma
  • assert palabra clave (especificada en JSR 41 )
  • Mejoras de biblioteca
  • Expresiones regulares modeladas después de expresiones regulares de Perl
  • El encadenamiento de excepciones permite una excepción para encapsular la excepción original de nivel inferior
  • Soporte de Protocolo de Internet versión 6 ( IPv6 )
  • E/S sin bloqueo (Java) (llamado NIO) (especificado en JSR 51 )
  • API de registro (especificada en JSR 47 )
  • API de E/S de imágenes para leer y escribir imágenes en formatos como JPEG y PNG
  • Analizador XML integrado y procesador XSLT ( JAXP ) (especificado en JSR 5 y JSR 63 )
  • Extensiones integradas de seguridad y criptografía ( JCE , JSSE , JAAS )
  • Incluye Java Web Start (Java Web Start se lanzó por primera vez en marzo de 2001 para J2SE 1.3) (especificado en JSR 56 )
  • API de preferencias ( java.util.prefs )

El soporte público y las actualizaciones de seguridad para Java 1.4 finalizaron en octubre de 2008. Las actualizaciones de seguridad pagadas para los clientes de Oracle finalizaron en febrero de 2013.


J2SE 5.0 

Nombre de marca Tiger . El lanzamiento fue el 30 de septiembre de 2004 versión fue originalmente numerada 1.5, que todavía se usa como número de versión interna. El número fue cambiado para "reflejar mejor el nivel de madurez, estabilidad, escalabilidad y seguridad del J2SE". Esta versión fue desarrollada bajo JSR 176 .

J2SE 5.0 entró en su período final de actualizaciones públicas el 8 de abril de 2008; las estas ya no están disponibles al público desde el 3 de noviembre de 2009. estaban disponibles para los clientes de Oracle pagados hasta mayo de 2015. 

Tiger agregó una serie de nuevas características significativas del lenguaje: 

  • Genéricos: proporciona seguridad del tipo tiempo de compilación (estático) para las colecciones y elimina la necesidad de la mayoría de los tipos de letra (conversión de tipo) (especificado por JSR14 )
  • Metadatos: También llamados anotaciones; permite que construcciones de lenguaje tales como clases y métodos sean etiquetados con datos adicionales, que luego pueden ser procesados ​​por utilidades compatibles con metadatos (especificadas por JSR 175 )
  • Autoboxing/unboxing: Conversiones automáticas entre tipos primitivos (como int) y clases de envoltura primitiva (como Integer) (especificado por JSR 201 )
  • Enumeraciones: la palabra clave enum crea una lista de valores typesafe (por ejemplo, ordenar Day.MONDAY, Day.TUESDAY, etc.); anteriormente, esto solo podía lograrse con enteros constantes no confidenciales o clases construidas manualmente (patrón de enumeración seguro) (especificado por JSR 201 )
  • Varargs: El último parámetro de un método ahora se puede declarar utilizando un nombre de tipo seguido de tres puntos (por ejemplo void drawtext(String... lines)); en el código de llamada se puede usar cualquier número de parámetros de ese tipo y luego se colocan en una matriz para pasar al método, o alternativamente el código de llamada puede pasar una matriz de ese tipo
  • for each Bucle mejorado: la sintaxis del bucle for se amplía con una sintaxis especial para iterar sobre cada miembro de una matriz o cualquiera Iterable, como las clases  Collection estándar (especificadas por JSR 201 )
  • Semántica de ejecución mejorada para programas Java de subprocesos múltiples; el nuevo modelo de memoria Java aborda problemas de complejidad, eficacia y rendimiento de especificaciones previas 

También hubo las siguientes mejoras en las bibliotecas estándar:
  • Generación de stub automática para objetos RMI
  • Swing : Nueva apariencia y sensación personalizables , llamada sintetizador
  • Las utilidades de simultaneidad en el paquete java.util.concurrent 
  • La clase  escáner  para analizar datos de varias secuencias de entrada y búferes

Java 5 es la última versión de Java que admite oficialmente Microsoft Windows 98 y Windows ME , mientras que Windows Vista era la versión más nueva de Windows en la que J2SE 5 era compatible antes de que Java 5 terminara en octubre de 2009. 

Java 5 Update 5 (1.5.0_05) es la última versión de Java para trabajar en Windows 95 (con Internet Explorer 5.5 instalado) y Windows NT 4.0 .

Java 5 estaba primero disponible en Apple Mac OS X 10.4 (Tiger) y era la versión predeterminada de Java instalada en Apple Mac OS X 10.5 (Leopard).

El soporte público y las actualizaciones de seguridad para Java 1.5 finalizaron en noviembre de 2009. Las actualizaciones de seguridad de pago para los clientes de Oracle finalizaron en abril de 2015

Esta correspondencia continuó a través de versiones posteriores (Java 6 = JDK 1.6, Java 7 = JDK 1.7, y así sucesivamente).

A continuación se describe una tabla con las versiones a partir de la versión 5.0

LanzamientoFecha de lanzamientoReflejos
Java SE 52004-10-4Metadatos, tipos genéricos, autoboxing y auto-unboxing de tipos primitivos, forbucle mejorado , tipos enumerados, importación estática, E / S formateadas, varargs y utilidades de simultaneidad. Mejora del tiempo de inicio y la huella de memoria. Uso compartido de datos de solo lectura entre varias JVM en ejecución. Monitoreo y administración remota. Una nueva API de creación de perfiles JVM. Generación programática de trazas de pila. Soporte para XML 1.1 con Namespaces, XML Schema, SAX 2.0.2, DOM Level 3 y XSLT con un rápido compilador XSLTC. Soporte de Unicode 4.0.
Actualización de Java SE 5 12004-12-2550 errores han sido arreglados
Java SE 5 Update 22005-03-16Se corrigieron algunos accidentes. El programa ahora está compilado con una mejor optimización. Las correcciones de errores del calendario y otras correcciones de errores se realizaron.
Java SE 5 Update 32005-05-03Esta versión corrige varios errores, incluidos los bloqueos del complemento Linux Mozilla.
Java SE 5 Update 42005-07-04Con el lanzamiento, el soporte de J2SE para Windows de 64 bits ha progresado desde el lanzamiento de la versión hasta la versión final. Esta versión se ejecuta en máquinas de modo AMD64 / EM64T de 64 bits con Windows Server 2003 x64 Editions.
Java SE 5 Update 52005-09-18Se corrigieron varios errores y se realizaron mejoras de rendimiento. Ãšltima versión para Windows 95 y Windows NT 4.0.
Java SE 5 Update 62005-12-07Antes de esta actualización, un applet o aplicación podría especificar la versión del JRE en el que se ejecutaría. Esto ha cambiado Todos los applets se ejecutan con la última versión de JRE.
Java SE 5 Update 72006-05-29Se corrigieron varios errores y se realizaron mejoras de rendimiento.
Java SE 5 Update 82006-08-13Se corrigieron varios errores y se realizaron mejoras de rendimiento.
Actualización de Java SE 5 92006-11-12Esta versión corrige varias regresiones menores.
Actualización de Java SE 5 102006-12-22Se agregó una implementación del servicio de notificación de eventos de E / S epoll, compatible con Linux 2.6. Se corrigieron muchos errores.
Actualización de Java SE 5 112007-03-08Se corrigieron varios errores y se realizaron mejoras de rendimiento.
Actualización de Java SE 5 122007-06-11
Actualización de Java SE 5 132007-10-05Se corrigieron varias vulnerabilidades de seguridad en Java Web Start relacionadas con el acceso a archivos locales. Se corrigió una vulnerabilidad de seguridad en el JRE que permitía eludir las restricciones de acceso a la red. Varios otros problemas de seguridad y errores menores fueron corregidos.
Actualización Java SE 5 14
Actualización de Java SE 5 152008-03-06Se corrigieron varios bloqueos debido al almacenamiento intermedio del montón fuera de los límites, junto con varios otros errores. Se incluyen ahora nuevos certificados raíz de AOL, DigiCert y TrustCenter.
Actualización de Java SE 5 162008-07-23Este lanzamiento corrige varios fallos de seguridad, como vulnerabilidades de DoS, desbordamientos de búfer y otros errores que podrían provocar bloqueos o que darían a los applets acceso a ciertos recursos del sistema. Estas vulnerabilidades se ubicaron en Java Web Start, en el Agente de administración de Java Management Extensions (JMX) y en las funciones para manejar datos XML.
Actualización de Java SE 5 172008-12-03La implementación de juego de caracteres UTF-8 se actualizó para manejar la forma no más corta de secuencias de bytes UTF-8, introduciendo una incompatibilidad de versiones anteriores. Se agregaron nuevos certificados raíz. Se corrigieron muchos errores.
Actualización Java SE 5 182009-03-25Se resolvieron varios problemas de seguridad. El comportamiento de la función JNDI para almacenar y recuperar objetos Java en un directorio LDAP se modificó ligeramente. Se agregaron cinco nuevos certificados raíz. Se corrigieron muchos errores.
Actualización de Java SE 5 192009-05-29Se agregó soporte para varias configuraciones de sistema. Se agregó soporte de etiqueta de servicio. Se corrigieron muchos errores, incluidos varios bloqueos y pérdidas de memoria.
Java SE 5 Actualización 202009-08-06Se resolvieron varias vulnerabilidades de seguridad, como el posible acceso al sistema por applets que no son de confianza, y desbordamientos enteros en el procesamiento de imágenes y en Unpack200. Se agregaron varios certificados raíz nuevos. Se corrigieron muchos otros errores menores.
Actualización de Java SE 5 212009-09-09Se corrigieron muchos errores menores.
Actualización de Java SE 5 222009-11-04Esta versión marca End of Service Life (EOSL) para Java 5 y es su versión pública final. Se corrigieron varias vulnerabilidades de seguridad, informadas como Sun Alerts 269868, 270474, 270475 y 270476. Se corrigieron varios otros errores. Además, se agregaron dos nuevos certificados raíz.
Java SE 5 Update 232010-01-13No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 32 soluciones de seguridad.
Java SE 5 Update 242010-04-15No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 2 soluciones de seguridad.
Actualización de Java SE 5 252010-07-07No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 26 soluciones de seguridad.
Actualización de Java SE 5 262010-10-12No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 2 soluciones de seguridad.
Actualización de Java SE 5 272010-12-08No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 22 soluciones de seguridad.
Actualización Java SE 5 282011-02-15No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 22 soluciones de seguridad 
Actualización de Java SE 5 292011-03-21No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 21 soluciones de seguridad.
Actualización de Java SE 5 302011-06-07No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 1 solución de seguridad.
Actualización de Java SE 5 312011-08-16No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 10 soluciones de seguridad.
Java SE 5 Update 322011-10-18No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 20 soluciones de seguridad 
Actualización de Java SE 5 332011-12-12No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 21 soluciones de seguridad.
Java SE 5 Update 342012-02-14No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 14 soluciones de seguridad 
Actualización de Java SE 5 352012-04-26No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 5 soluciones de seguridad.
Java SE 5 Update 362012-06-12No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 14 soluciones de seguridad
Actualización Java SE 5 382012-08-14No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 30 correcciones de seguridad 
Actualización de Java SE 5 392013-02-19No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 50 correcciones de seguridad 
Java SE 5 Update 402013-02-19No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 5 correcciones de seguridad 
Actualización de Java SE 5 412013-03-04No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 2 soluciones de seguridad 
Actualización de Java SE 5 452013-04-16No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 42 soluciones de seguridad 
Actualización de Java SE 5 512013-06-18No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 40 correcciones de seguridad 
Actualización de Java SE 5 552013-10-15No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 51 soluciones de seguridad 
Actualización de Java SE 5 612014-01-14No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 36 soluciones de seguridad 
Actualización de Java SE 5 652014-04-15No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 37 soluciones de seguridad 
Actualización de Java SE 5 712014-07-15No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 20 soluciones de seguridad 
Actualización de Java SE 5 752014-10-16No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 25 soluciones de seguridad 
Actualización de Java SE 5 812015-01-21No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 19 soluciones de seguridad 
Actualización de Java SE 5 852015-04-14No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 14 soluciones de seguridad 


Java SE 6 

Nombre clave Mustang . A partir de la versión publicada el 11 de diciembre de 2006, Sun reemplazó el nombre "J2SE" con Java SE y eliminó el ".0" del número de versión. La numeración interna para desarrolladores sigue siendo 1.6.0. Esta versión fue desarrollada bajo JSR 270 .

Durante la fase de desarrollo, las nuevas compilaciones, incluidas las mejoras y las correcciones de errores, se publicaron semanalmente. Las versiones beta se lanzaron en febrero y junio de 2006, lo que condujo a una versión final que se produjo el 11 de diciembre de 2006.

Cambios importantes incluidos en esta versión:
  • Soporte para versiones anteriores de Win9x caídas; extraoficialmente, Java 6 Update 7 fue la última versión de Java que se demostró que funciona en estas versiones de Windows. Esto se cree debido a los cambios importantes en la Actualización 10.
  • Compatibilidad con el lenguaje de scripts: API genérica para una estrecha integración con lenguajes de scripting y una integración incorporada de Mozilla JavaScript Rhino .
  • Dramáticas mejoras de rendimiento para la plataforma central y Swing .
  • Soporte mejorado del servicio web a través de JAX-WS.
  • Compatibilidad con JDBC 4.0.
  • API de compilador de Java: Una API que permite que un programa de Java seleccione e invoque a un compilador de Java mediante programación.
  • Actualización de JAXB a la versión 2.0: incluye la integración de un analizador StAX .
  • Soporte para anotaciones conectables.
  • Muchas mejoras en la GUI , como la integración de SwingWorker en la API, la clasificación y el filtrado de tablas, y el verdadero búfer doble Swing (eliminando el efecto de área gris).
  • Las mejoras de JVM incluyen: sincronización y optimizaciones del rendimiento del compilador, nuevos algoritmos y actualizaciones a los algoritmos de recolección de basura existentes y el rendimiento de inicio de la aplicación.

Java 6 se puede instalar en Mac OS X 10.5 (Leopard) ejecutándose en procesadores de 64 bits (Core 2 Duo y superiores). Java 6 también es compatible con máquinas de 32 y 64 bits que ejecutan Mac OS X 10.6 (Snow Leopard).

Java 6 llegó al final de su vida útil en febrero de 2013, momento en el que todas las actualizaciones públicas, incluidas las actualizaciones de seguridad, debían detenerse. Oracle lanzó dos actualizaciones más a Java 6 en marzo y abril de 2013, que corrigió algunas vulnerabilidades de seguridad


Actualizaciones de Java 6

Después del lanzamiento de Java 6, Sun y más tarde Oracle lanzó varias actualizaciones que, sin cambiar ninguna API pública, mejoraron la usabilidad del usuario final o corrigieron errores.


LanzamientoFecha de lanzamientoReflejos
Java SE 62006-12-23Esta versión agrega muchas mejoras en los campos de servicios web, secuencias de comandos, bases de datos, anotaciones conectables y seguridad, así como calidad, compatibilidad y estabilidad. JConsole ahora es oficialmente compatible. Se agregó el soporte de Java DB.
Actualización de Java SE 6 12007-05-07
Java SE 6 Update 22007-07-03
Java SE 6 Update 32007-10-03
Java SE 6 Update 42008-01-14HotSpot VM 10
Java SE 6 Update 52008-03-05Varios defectos de seguridad fueron eliminados. Se incluyen ahora nuevos certificados raíz de AOL, DigiCert y TrustCenter.
Actualización de Java SE 6 62008-04-16Se introdujo una solución para el infame problema de aserción de bloqueo de Xlib / XCB. Se corrigió una pérdida de memoria al usar la autenticación Kerberos con LoginContext. Se corrigieron varios otros errores.
Actualización de Java SE 6 7 Extraoficialmente, Java SE 6 Update 7 (1.6.0.7) es la última versión de Java que se demostró que funcionaba en la familia de sistemas operativos Win9x 
Actualización de Java SE 6 10 2008-10-15
HotSpot VM 11. Los principales cambios para esta actualización incluyen:

  • Java Deployment Toolkit, un conjunto de funciones de JavaScript para facilitar el despliegue de applets y aplicaciones Java Web Start.
  • Java Kernel, un pequeño instalador que incluye solo las clases de JRE más comúnmente usadas. Otros paquetes se descargan cuando es necesario.
  • Actualizador mejorado.
  • Versiones mejoradas y compatibilidad con pack200: ya no se requiere soporte en el servidor. 
  • Java Quick Starter, para mejorar el tiempo de arranque en frío.
  • Mejora del rendimiento de las primitivas de gráficos Java2D en Windows, utilizando Direct3D y la aceleración de hardware.
  • Una nueva apariencia y sensación de Swing llamada Nimbus y basada en sintetizador.
  • Plug-in de Java de próxima generación: los applets ahora se ejecutan en un proceso separado y admiten muchas características de las aplicaciones de Web Start.
Actualización de Java SE 6 11 2008-12-0313 soluciones de seguridad 
Actualización de Java SE 6 12 2008-12-12Sin correcciones de seguridad; Plug-in de 64 bits de Java (solo para navegadores web de 64 bits); Soporte de Windows Server 2008 ; mejoras de rendimiento de gráficos y aplicaciones JavaFX
Actualización de Java SE 6 13 2009-03-247 correcciones de seguridad, JNDI almacena y recupera objetos Java en LDAP ligeramente modificados, JMX Change (createMBeanunregisterMBean), se agregaron 4 nuevos certificados raíz
Actualización de Java SE 6 14 2009-05-28
HotSpot VM 14. Esta versión incluye extensas actualizaciones de rendimiento para el compilador JIT, punteros comprimidos para máquinas de 64 bits, así como soporte para el recolector de basura de baja pausa G1 (Basura primero). 
La opción -XX: + DoEscapeAnalysis dirige el compilador HotSpot JIT para utilizar el análisis de escape para determinar si los objetos locales pueden asignarse en la pila en lugar del montón.
Algunos desarrolladores han notado un problema introducido en este lanzamiento que hace que los depuradores pierdan puntos de ruptura de forma aleatoria. Sun tiene un error correspondiente, que está rastreando el problema. La solución alternativa se aplica a las máquinas virtuales de cliente y servidor. Usar la opción -XX: + UseParallelGC evitará la falla. Otra solución es retroceder a la actualización 13 o actualizar a la actualización 16.
Actualización de Java SE 6 152009-08-04Se introdujo la funcionalidad de parche en el lugar 
Actualización de Java SE 6 162009-08-11Se solucionó el problema introducido en la actualización 14 que causaba que los depuradores pasaran por alto los puntos de interrupción 
Actualización de Java SE 6 17 2009-11-04Correcciones de seguridad; dos nuevos certificados raíz
Actualización de Java SE 6 182010-01-13Sin correcciones de seguridad; Hotspot VM 16; soporte para Ubuntu 8.04 LTS Desktop Edition, SLES 11, Windows 7 , Red Hat Enterprise Linux 5.3, Firefox 3.6, VisualVM 1.2; Java DB actualizado; muchas mejoras de rendimiento
Actualización de Java SE 6 19 2010-03-30Correcciones de seguridad; cambios en el certificado raíz: siete nuevos, tres eliminados, cinco reemplazados con algoritmos de firmas más fuertes; solución provisional para el ataque de renegociación TLS
Actualización de Java SE 6 20 2010-04-152 soluciones de seguridad
Actualización de Java SE 6 21 2010-07-07Sin correcciones de seguridad; Hotspot VM 17; soporte para Red Hat Enterprise Linux 5.4 y 5.5, Oracle Enterprise Linux 4.8, 5.4, 5.5; Soporte de Google Chrome 4; soporte para Indicadores de progreso de carga personalizados; VisualVM 1.2.2
Actualización de Java SE 6 22 2010-10-1229 soluciones de seguridad; Soporte RFC 5746
Actualización de Java SE 6 23 2010-12-08Sin correcciones de seguridad; Hotspot VM 19; mejor soporte para idiomas de derecha a izquierda
Actualización de Java SE 6 24 2011-02-1521 soluciones de seguridad; Java DB actualizado
Actualización de Java SE 6 252011-03-21Sin correcciones de seguridad; Hotspot VM 20; soporte para Internet Explorer 9 , Firefox 4 y Chrome 10; BigDecimal mejorado;incluye una compilación "por niveles" en Server VM que le permite iniciarse rápidamente al igual que la máquina virtual cliente, mientras logra un mejor rendimiento máximo (esta función se habilita especificando -server y -XX: + opciones de comandoTieredCompilation ) 
Actualización de Java SE 6 26 2011-06-0717 nuevas soluciones de seguridad; Ãºltima versión compatible con Windows Vista SP1
Actualización de Java SE 6 27 2011-08-16Sin correcciones de seguridad; certificación para Firefox 5
Actualización de Java SE 6 29 2011-10-1820 soluciones de seguridad, varias correcciones de errores 
Actualización de Java SE 6 30 2011-12-12Sin correcciones de seguridad; corregir la regresión SSL en la Actualización 29; soporte para Red Hat Enterprise Linux 6
Actualización de Java SE 6 31 2012-02-1414 soluciones de seguridad y una corrección de errores; la última versión funciona de manera confiable para Windows 2000 
JAVA SE 6 Actualización 32 2012-04-26Sin correcciones de seguridad, varias correcciones de errores
Actualización de Java SE 6 33 2012-06-1214 correcciones de seguridad, carga de archivos de configuración de VM mejorada
Actualización de Java SE 6 342012-08-14Sin correcciones de seguridad, varias correcciones de errores
Actualización de Java SE 6 35 30/08/2012Contiene una solución de seguridad en profundidad 
Actualización de Java SE 6 37 2012-10-1630 correcciones de seguridad
Actualización de Java SE 6 38 2012-12-11Varias correcciones de errores 
Actualización de Java SE 6 39 2013-02-0150 soluciones de seguridad
Actualización de Java SE 6 41 2013-02-195 soluciones de seguridad
Actualización de Java SE 6 43 2013-03-042 soluciones de seguridad
Actualización Java SE 6 45 2013-04-1642 soluciones de seguridad;  otros cambios;  actualización pública final. 
Actualización de Java SE 6 51 2013-06-18No disponible públicamente, solo disponible a través del programa Java SE Support y en Apple Update para OS X Snow Leopard, Lion & Mountain Lion; hasta 40 correcciones de seguridad 
Actualización de Java SE 6 65 2013-10-15No disponible públicamente, solo disponible a través del programa Java SE Support y en Apple Update para OS X Snow Leopard, Lion & Mountain Lion; al menos 11 soluciones de seguridad críticas 
Actualización de Java SE 6 71 2014-01-14No disponible para descarga pública; 33 soluciones 
Actualización de Java SE 6 75 2014-04-15No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el grupo de parches recomendados de Solaris 10 no. # 54; 25 soluciones de seguridad 
Actualización de Java SE 6 81 2014-07-15No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 11 soluciones de seguridad 
Actualización de Java SE 6 85 2014-10-16No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 18 soluciones de seguridad 
Actualización de Java SE 6 91 2015-01-21Las versiones de Linux x64 y Windows i586 están disponibles como la implementación de referencia de Java SE 6. Otras versiones solo están disponibles a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 15 soluciones de seguridad 
Java SE 6 Update 952015-04-14No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 14 soluciones de seguridad
Actualización de Java SE 6 1012015-07-15No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 18 soluciones de seguridad la certificación para IE 10 y 11 se introdujo en 1.6.0_101
Actualización de Java SE 6 1052015-10-20No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 17 soluciones de seguridad
Actualización de Java SE 6 1112016-01-20No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 13 soluciones de seguridad 
Actualización de Java SE 6 1132016-02-05No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 1 solución de seguridad 
Actualización de Java SE 6 1152016-04-21No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 8 soluciones de seguridad
Actualización de Java SE 6 1212016-07-19No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 15 soluciones de seguridad
Actualización de Java SE 6 1312016-10-18No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 13 soluciones de seguridad
Java SE 6 Update 1412017-01-17No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 17 soluciones de seguridad
Actualización de Java SE 6 1512017-04-18No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 10 correcciones de seguridad 
Actualización de Java SE 6 1612017-07-18No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 5 soluciones de seguridad 
Actualización de Java SE 6 1712017-10-20No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 7 soluciones de seguridad 
Actualización Java SE 6 1812018-01-16No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 12 soluciones de seguridad 
Actualización de Java SE 6 1912018-04-17No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 7 soluciones de seguridad
Java SE 6 Update 2012018-07-17No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 3 soluciones de seguridad 



Java SE 7 

Nombre clave Dolphin es una actualización importante que se lanzó el 7 de julio de 2011 y se puso a disposición de los desarrolladores el 28 de julio de 2011. El período de desarrollo se organizó en trece hitos; el 6 de junio de 2011, se completó el último de los trece hitos. En promedio, 8 compilaciones (que generalmente incluían mejoras y correcciones de errores) se publicaron por hito. La lista de características en el proyecto OpenJDK 7 enumera muchos de los cambios.


Las adiciones en Java 7 incluyen:
  • Compatibilidad con JVM para lenguajes dinámicos , con el nuevo bytecode invokedynamic bajo JSR-292, siguiendo el trabajo de creación de prototipos realizado actualmente en la máquina virtual multilenguaje
  • Punteros comprimidos de 64 bits (disponible en Java 6 con -XX: + UseCompressedOops)
  • Estos pequeños cambios de lenguaje (agrupados en un proyecto llamado Coin):
  • Cadenas en el interruptor
  • Gestión automática de recursos en try-statement 
  • Inferencia de tipo mejorada para creación de instancia genérica, también conocido como el operador de diamante <> 
  • Declaración del método varargs simplificado
  • Literales enteros binarios 
  • Permitir caracteres de subrayado en literales numéricos 
  • Capturando múltiples tipos de excepciones y volviendo a lanzar excepciones con una verificación de tipos mejorada
  • Servicios de simultaneidad bajo JSR 166 
  • Nueva biblioteca de E/S de archivos (definida por JSR 203) que agrega soporte para múltiples sistemas de archivos, metadatos de archivos y enlaces simbólicos. Los nuevos paquetes son java.nio.file , java.nio.file.attribute y java.nio.file.spi
  • Timsort se usa para ordenar colecciones y matrices de objetos en lugar de ordenar por fusión
  • Soporte a nivel de biblioteca para algoritmos de criptografía de curva elíptica
  • Una tubería XRender para Java 2D, que mejora el manejo de las características específicas de las GPU modernas
  • Nuevas API de plataforma para las características gráficas implementadas originalmente en la versión 6u10 como API no compatibles 
  • Compatibilidad mejorada a nivel de biblioteca para nuevos protocolos de red, incluidos SCTP y el protocolo de socket directo
  • Actualizaciones de Upstream a XML y Unicode
  • Reglas de implementación de Java
Lambda (implementación de Java de funciones lambda ), Jigsaw (implementación de módulos Java ) y parte de Coin se eliminaron de Java 7 y se lanzaron como parte de Java 8 (a excepción de Jigsaw , que estará en Java 9).

Java 7 era la versión predeterminada para descargar en java.com desde abril de 2012 hasta que se lanzó Java 8.


Actualizaciones de Java 7
Oracle emitió actualizaciones públicas para la familia Java 7 trimestralmente hasta abril de 2015, cuando el producto llegó al final de su ciclo de vida de soporte.
LanzamientoFecha de lanzamientoReflejos
Java SE 7 2011-07-28Versión inicial; HotSpot VM 21
Actualización de Java SE 7 1 2011-10-1820 correcciones de seguridad, otras correcciones de errores
Actualización de Java SE 7 2 2011-12-12Sin correcciones de seguridad; HotSpot VM 22; confiabilidad y mejoras de rendimiento; soporte para Solaris 11 y Firefox 5 y versiones posteriores; JavaFX incluido con Java SE JDK, mejoras para aplicaciones implementadas en la web
Actualización de Java SE 7 3 2012-02-1414 soluciones de seguridad
Actualización de Java SE 7 4 2012-04-26Sin actualizaciones de seguridad; HotSpot VM 23; Soporte JDK para Mac OS X
Actualización de Java SE 7 5 2012-06-1214 soluciones de seguridad 
Actualización de Java SE 7 6 2012-08-14JavaFX y Java Access Bridge incluidos en la instalación Java SE JDK y JRE, soporte JavaFX para monitores táctiles y touch pads, soporte JavaFX para Linux, JDK y JRE Support para Mac OS X, JDK para Linux en ARM 
Actualización de Java SE 7 7 30/08/20124 soluciones de seguridad 
Actualización de Java SE 7 9 2012-10-1630 soluciones de vulnerabilidades de seguridad
Actualización de Java SE 7 10 2012-12-11Nuevas características de seguridad, como la posibilidad de desactivar cualquier aplicación Java para que se ejecute en el navegador y nuevos cuadros de diálogo para advertirle cuando el JRE no es seguro y correcciones de errores
Actualización 11 de Java SE 7 2013-01-13Olson Data 2012i; corrección de errores por problemas con el registro de complementos en sistemas con la versión autónoma de JavaFX instalado, correcciones de seguridad para CVE-2013-0422; el nivel de seguridad predeterminado para los applets de Java y las aplicaciones de inicio web ha aumentado de "Medio" a "Alto"
Actualización 13 de Java SE 7 2013-02-0150 soluciones de seguridad
Actualización de Java SE 7 15 2013-02-195 soluciones de seguridad
Actualización 17 de Java SE 7 2013-03-042 soluciones de seguridad
Actualización de Java SE 7 21 2013-04-16Múltiples cambios que incluyen 42 soluciones de seguridad, un nuevo servidor JRE que no incluye el complemento y el JDK para Linux en ARM
Actualización de Java SE 7 25 2013-06-18Múltiples cambios que incluyen 40 correcciones de seguridad 
Actualización de Java SE 7 402013-09-10621 correcciones de errores, Las nuevas características de seguridad, ARM hardfloat , Java 5.2 Control de la Misión y la Retina Display de apoyo
Actualización de Java SE 7 45 2013-10-1551 soluciones de seguridad; protecciones contra la redistribución no autorizada de aplicaciones Java; restaurar las indicaciones de seguridad; JAXP cambia; TimeZone.setDefault cambio
Actualización de Java SE 7 51 2014-01-1436 soluciones de seguridad; bloquear applets JAVA sin manifiesto (como Remote console - Java Applet - IBM IMM card, HP iLO card) aunque el cuadro de diálogo de advertencia sea con la frase "se bloqueará en la próxima versión", 17 correcciones de errores
Actualización de Java SE 7 55 2014-04-1537 correcciones de seguridad, 19 correcciones de errores 
Actualización de Java SE 7 60 2014-05-28Java Mission Control 5.3, 130 correcciones de errores 
Actualización de Java SE 7 65 2014-07-1518 correcciones de errores 
Actualización de Java SE 7 67 2014-08-041 solución de error 
Actualización de Java SE 7 712014-10-1416 correcciones de errores 
Actualización de Java SE 7 72 2014-10-14La misma fecha de lanzamiento con la Actualización 71 como una actualización de conjunto de parches (PSU) correspondiente para Java SE 7,  36 correcciones de errores 
Actualización de Java SE 7 75 2015-01-2012 correcciones de errores,  SSLv3 deshabilitado por defecto
Actualización de Java SE 7 76 2015-01-20La misma fecha de lanzamiento con la Actualización 75 como una actualización de conjunto de parches (PSU) correspondiente para Java SE 7, 97 correcciones de errores
Actualización de Java SE 7 79 2015-04-1421 soluciones de seguridad, 6 correcciones de errores, 
Actualización de Java SE 7 80 2015-04-14Último lanzamiento público de Java 7; la misma fecha de lanzamiento con la actualización 79 como una actualización de conjunto de parches (PSU) correspondiente para Java SE 7, 104 correcciones de errores 
Actualización de Java SE 7 852015-07-15No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 25 soluciones de seguridad
Actualización de Java SE 7 912015-10-20No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 20 soluciones de seguridad 
Java SE 7 Update 952016-01-19No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 8 soluciones de seguridad 
Actualización de Java SE 7 972016-02-05No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 1 solución de seguridad 
Actualización de Java SE 7 992016-03-23No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 1 solución de seguridad 
Actualización de Java SE 7 1012016-04-18No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 22 soluciones de seguridad
Actualización de Java SE 7 1112016-07-19No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 36 soluciones de seguridad
Actualización de Java SE 7 1212016-10-18No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 32 soluciones de seguridad 
Actualización de Java SE 7 1312017-01-17No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 34 soluciones de seguridad 
Actualización de Java SE 7 1412017-04-18No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 8 soluciones de seguridad 
Actualización de Java SE 7 1512017-07-18No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 4 correcciones de seguridad 
Actualización de Java SE 7 1612017-10-20No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 4 correcciones de seguridad 
Actualización de Java SE 7 1712018-01-16No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 51 soluciones de seguridad 
Actualización de Java SE 7 1812018-04-17No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 12 correcciones de seguridad
Actualización de Java SE 7 1912018-07-17No disponible públicamente, solo disponible a través del programa de soporte Java SE y en el cluster de parches recomendados de Solaris 10; 9 soluciones de seguridad 



Java SE 8

Nombre clave: Spider se lanzó el 18 de marzo de 2014, e incluía algunas características que se planificaron para Java 7 pero luego se pospuso.

El trabajo sobre las características se organizó en términos de propuestas de mejora de JDK (JEP, por sus siglas en inglés)
  • JSR 335, JEP 126: soporte a nivel de idioma para expresiones lambda (oficialmente, expresiones lambda, extraoficialmente, cierres ) en el Proyecto Lambda y métodos predeterminados ( métodos de extensión virtual ) que permiten la adición de métodos para interfaces sin romper implementaciones existentes. Hubo un debate en curso en la comunidad Java sobre si agregar soporte para expresiones lambda. Sun luego declaró que las expresiones lambda se incluirían en Java y se solicitó la entrada de la comunidad para refinar la característica. soporte de expresiones lambda también permite funcional operaciones de estilo en flujos de elementos, como las transformaciones inspiradas en MapReduce en colecciones. Los métodos predeterminados permiten que un autor de una API agregue nuevos métodos a una interfaz sin romper el código anterior al usarla. Aunque no era su intención principal, los métodos predeterminados también permiten herencia múltiple de comportamiento (pero no de estado).

  • JSR 223, JEP 174: Project Nashorn , un tiempo de ejecución de JavaScript que permite a los desarrolladores insertar código JavaScript dentro de las aplicaciones
  • JSR 308, JEP 104: Anotación sobre tipos de Java 
  • Cálculo de enteros sin signo 
  • JSR 337, JEP 120: Anotaciones repetitivas 
  • JSR 310, JEP 150: API de fecha y hora 
  • JEP 178: bibliotecas JNI vinculadas estáticamente 
  • JEP 153: Lanzamiento de aplicaciones JavaFX (lanzamiento directo de JAR de aplicación JavaFX)
  • JEP 122: Eliminar la generación permanente

Java 8 no es compatible con Windows XP, pero a partir de la actualización 25 de JDK 8, aún puede instalarse y ejecutarse bajo Windows XP. Las actualizaciones anteriores de JDK 8 podían ejecutarse bajo XP, pero tuvieron que ser instaladas luego de una instalación forzada, al descomprimir directamente los archivos del ejecutable de instalación.

A partir de octubre de 2014, Java 8 fue la versión predeterminada para descargar (y luego nuevamente reemplazando a Java 9) del sitio web oficial. "Oracle no publicará más actualizaciones de Java SE 8 en sus sitios de descarga pública para uso comercial después de enero de 2019".

Actualizaciones de Java 8
LanzamientoFecha de lanzamientoReflejos
Java SE 82014-03-18Versión inicial
Actualización de Java SE 8 5 2014-04-15Usando " * " en el atributo Caller-Allowable-Codebase ; 11 correcciones de errores
Actualización de Java SE 8 11 2014-07-15Java Dependency Analysis Tool (jdeps); La opción del Panel de control de Java para deshabilitar patrocinadores; Atributo de archivo JAR - Entry-Point; Propiedad del límite de procesamiento JAXP - maxElementDepth; 18 correcciones de errores de seguridad, 15 correcciones de errores
Actualización de Java SE 8 20 2014-08-19669 correcciones de errores, JMC 5.4, deduplicación de cadenas (deshabilitada por defecto)
Actualización de Java SE 8 25 2014-10-1410 correcciones de errores
Actualización de Java SE 8 31 2015-01-1926 correcciones de errores; SSLv3 (deshabilitado por defecto)
Actualización Java SE 8 402015-03-03645 correcciones de errores, Se agregó la noción de "presión de la memoria" para ayudar a indicar qué cantidad de la memoria del sistema aún está disponible (baja presión = alta memoria, alta presión = baja memoria)
Actualización Java SE 8 452015-04-1413 correcciones de errores
Actualización Java SE 8 512015-07-14Se agregó soporte para sandbox nativo en plataformas Windows (deshabilitado por defecto); también, 25 soluciones de seguridad, 14 correcciones de errores
Actualización Java SE 8 602015-08-18480 correcciones de errores 
Actualización de Java SE 8 65 2015-10-2025 soluciones de seguridad, 3 correcciones de errores
Actualización de Java SE 8 66 2015-11-1615 correcciones de errores
Actualización de Java SE 8 71 2016-01-198 correcciones de seguridad, 5 correcciones de errores
Java SE 8 Update 722016-01-198 soluciones de seguridad, 5 correcciones de errores, varias mejoras
Actualización de Java SE 8 73 2016-02-031 solución de seguridad
Actualización de Java SE 8 742016-02-031 solución de seguridad
Actualización de Java SE 8 77 2016-03-231 solución de seguridad
Actualización de Java SE 8 91 2016-04-199 soluciones de seguridad, 4 correcciones de errores y mejoras
Actualización de Java SE 8 922016-04-19Correcciones de errores y seguridad de 8u91, más 76 correcciones de errores adicionales; las banderasExitOnOutOfMemoryError y CrashOnOutOfMemoryError se han introducido
Actualización de Java SE 8 101 2016-07-19Correcciones de seguridad y errores de 8u92, más 9 correcciones de errores adicionales
Actualización Java SE 8 102 2016-07-19Correcciones de seguridad y errores de 8u101, más 118 correcciones de errores adicionales
Actualización Java SE 8 111 2016-10-187 soluciones de seguridad y 9 correcciones de errores
Actualización Java SE 8 112 2016-10-18Funciones adicionales y 139 correcciones de errores en 8u111
Actualización de Java SE 8 1212017-01-173 funciones adicionales, 5 cambios y 11 correcciones de errores sobre 8u112.
Actualización de Java SE 8 131 2017-04-184 cambios y 42 correcciones de errores (2 notables).
Actualización Java SE 8 141 2017-07-18Característica adicional, 3 cambios y 12 correcciones de errores.
Actualización Java SE 8 144 2017-07-2632 Soluciones de seguridad y corrección de errores de 8u141.
Actualización de Java SE 8 151 2017-10-1722 correcciones de seguridad, 2 notas, 1 revocación de certificado, 1 función nueva, 6 cambios y 24 correcciones de errores de 8u144.
Actualización de Java SE 8 152 2017-10-17Correcciones de seguridad, 1 función nueva, 1 cambio y 238 correcciones de errores de 8u151 (1 notable).
Actualización Java SE 8 161 2018-01-1621 soluciones de seguridad, 3 nuevas características, 9 cambios y 1 solución de errores de 8u152.
Actualización Java SE 8 162 2018-01-16Correcciones de seguridad, 63 correcciones de errores.
Actualización de Java SE 8 171 2018-04-17Correcciones de seguridad, correcciones de errores.
Actualización Java SE 8 172 2018-04-17Correcciones de seguridad, correcciones de errores.
Actualización Java SE 8 181 2018-07-17Correcciones de seguridad, correcciones de errores.


Java SE 9


En JavaOne 2011, Oracle discutió las características que esperaban lanzar para Java 9 en 2016. Java 9 debería incluir mejor soporte para montones de varios gigabytes, mejor integración del código nativo, un colector de basura predeterminado diferente ( G1 , para "tiempos de respuesta más cortos" ") y una JVM autoajustable. A principios de 2016, el lanzamiento de Java 9 fue reprogramado para marzo de 2017, más tarde nuevamente pospuesto cuatro meses más hasta julio de 2017, y cambió nuevamente para estar finalmente disponible el 21 de septiembre de 2017, debido a la controvertida aceptación de la implementación actual del Proyecto Jigsaw por parte del Comité Ejecutivo de Java que llevó a Oracle a solucionar algunos problemas y preocupaciones abiertos, y a refinar algunas cuestiones técnicas críticas. En los últimos días de junio de 2017, Java Community Process expresó un consenso casi unánime sobre el esquema propuesto del Sistema de Módulos.
  • JSR 376: Modularización del JDK bajo el Proyecto Jigsaw ( Sistema de Módulo de Plataforma Java ) 
  • JEP 222: jshell : El Shell de Java (un REPL de Java )
  • JEP 295: Compilación anticipada 
  • JEP 268: Catálogos XML 
  • JEP 266: Más actualizaciones de concurrencia. Incluye una implementación de Java de Flujos reactivos, que incluye una nueva clase de Flujo que incluirá las interfaces actualmente proporcionadas por Flujos reactivos. 
  • JEP 193: Manejadores variables: Defina un medio estándar para invocar los equivalentes de varias operaciones java.util.concurrent.atomic y sun.misc.Unsafe
  • JEP 282: jlink: Java Linker: Crea una herramienta que puede ensamblar y optimizar un conjunto de módulos y sus dependencias en una imagen personalizada en tiempo de ejecución. De hecho, permite producir un ejecutable completamente utilizable que incluye la JVM para ejecutarlo.
  • JavaDB fue eliminado de JDK 
  • JEP 263: gráficos HiDPI : escalado y dimensionamiento automático
El primer candidato de lanzamiento de Java 9 se lanzó el 9 de agosto de 2017. La primera versión estable de Java 9 fue el 21 de septiembre de 2017.

Actualizaciones de Java 9


LanzamientoFecha de lanzamientoReflejos
Java SE 9 2017-09-21Versión inicial
Java SE 9.0.1 2017-10-17Correcciones de seguridad de octubre de 2017 y correcciones de errores críticos
Java SE 9.0.4 2018-01-16
Lanzamiento final para JDK 9; Soluciones de seguridad de enero de 2018 y correcciones de errores críticos





Java SE 10

OpenJDK 10 fue lanzado el 20 de marzo de 2018, con doce nuevas funciones confirmadas. Entre estas características se encuentran:
  • JEP 286: Inferencia de tipo de variable local 
  • JEP 317: compilador JIT experimental basado en Java Esta es la integración del compilador dinámico Graal para la plataforma Linux x64
  • JEP 310: Uso compartido de datos de clase de aplicación Esto permite que las clases de aplicación se coloquen en el archivo compartido para reducir el inicio y la huella para aplicaciones Java
  • JEP 322: Versión de versión basada en el tiempo 
  • JEP 307: GC paralelo completo para G1 
  • JEP 304: interfaz Recolector de Basura 
  • JEP 314: Extensiones de etiquetas de idioma Unicode adicionales 
  • JEP 319: Certificados de raíz 
  • JEP 312: Thread-Local Handshakes 
  • JEP 316: Asignación de pila en dispositivos de memoria alternativos 
  • JEP 313: elimine la herramienta de generación de encabezado nativo - javah 
  • JEP 296: Consolidar el Bosque JDK en un Repositorio Único

Actualizaciones de Java 10


LanzamientoFecha de lanzamientoReflejos
Java SE 10 2018-03-20Versión inicial
Java SE 10.0.1 2018-04-17Correcciones de seguridad, 5 correcciones de errores 
Java SE 10.0.22018-07-17


Java SE 11

JDK 11 se lanzará el 25 de septiembre de 2018 y la versión está actualmente abierta para correcciones de errores. Java 11 incluirá una serie de características nuevas, como Constantes Dinámicas de Clase-Archivo, Epsilon: Un Recolector de Basura No-Op,Sintaxis de Variable Local para Parámetros Lambda, y Perfilado de Hep Low-Overhead, entre otras características.


Posibles características futuras

Se especula sobre la introducción de objetos sin identidad ( tipos de valores ), y se avanza hacia matrices direccionables de 64 bits para soportar grandes conjuntos de datos.
  • JSR 354: API de dinero y divisas

Implementaciones 

La plataforma Java oficialmente soportada desarrollada primero en Sun y ahora administrada por Oracle, es Java SE . Las versiones se basan en el proyecto OpenJDK, que es un proyecto de fuente abierta y gratuita con un modelo de desarrollo abierto. Sin embargo, existen otras implementaciones Java, en parte debido a la temprana historia de Java como software propietario, mientras que algunas implementaciones fueron creadas para ofrecer algunos beneficios sobre la implementación estándar, a menudo el resultado de algún área de investigación patrocinada por académicos o corporativos. Muchas distribuciones de GNU/Linux incluyen construcciones de OpenJDK a través del proyecto IcedTea iniciado por Red Hat, que proporciona un entorno de construcción e integración más fácil .

Visual J ++ y la máquina virtual Java de Microsoft se crearon como implementaciones incompatibles. Después de la demanda Sun v. Microsoft, Microsoft la abandonó y comenzó a trabajar en la plataforma .NET.

Otras implementaciones de Java propietarias están disponibles, como el trabajo de Azul .

Antes del lanzamiento de OpenJDK, mientras que la implementación de Sun todavía era propietaria, el proyecto GNU Classpath se creó para proporcionar una implementación de fuente abierta y gratuita de la plataforma Java. Desde el lanzamiento de JDK 7, cuando OpenJDK se convirtió en la implementación oficial de referencia, la motivación original para el proyecto GNU Classpath casi desapareció por completo y su último lanzamiento fue en 2012.

El proyecto Apache Harmony se inició poco antes del lanzamiento de OpenJDK. Después del lanzamiento del código fuente inicial de Sun, el proyecto Harmony continuó, trabajando para proporcionar una implementación bajo una licencia permisiva, en contraste con la licencia copyleft elegida para OpenJDK. Google más tarde desarrolló Android y lo lanzó bajo una licencia permisiva. Android incorporó partes del proyecto Harmony, complementado con la máquina virtual Dalvik propia de Google y ART. Desde entonces, Apache Harmony se retiró y Google cambió el uso de los componentes de Harmony por otros equivalentes de OpenJDK.

Tanto Jikes como Jikes RVM son proyectos de investigación de código abierto que fueron desarrollados por IBM .

Existen varias otras implementaciones que comenzaron como software propietario pero ahora son de código abierto. IBM desarrolló inicialmente OpenJ9 como el J9 propietario, pero desde entonces volvió a licenciar el proyecto y lo donó a la Fundación Eclipse . JRockit es una implementación patentada que fue adquirida por Oracle e incorporada en las versiones posteriores de OpenJDK.



Java Enterprise Edition (Java EE)


Java, Enterprise Edition ( Java EE ), anteriormente Java 2 Platforms, Enterprise Edition ( J2EE ), actualmente Jakarta EE, es un conjunto de especificaciones que amplía Java SE con especificaciones para funciones empresariales tales como informática distribuida y servicios web. Las aplicaciones Java EE se ejecutan en tiempos de ejecución de referencia, que pueden ser microservicios o servidores de aplicaciones,  que manejan transacciones, seguridad, escalabilidad, concurrencia y administración de los componentes que está implementando.

Java EE está definido por su especificación. La especificación define las API y sus interacciones. Al igual que con otras especificaciones de Java Community Process, los proveedores deben cumplir con ciertos requisitos de conformidad para declarar que sus productos cumplen con Java EE.

Los ejemplos de contextos en los que se utilizan tiempos de ejecución de referencia de Java EE son: comercio electrónico, contabilidad, sistemas de información bancaria.

La plataforma se conocía como Java 2 Platform, Enterprise Edition o J2EE desde la versión 1.2, hasta que el nombre se cambió a Java Platform, Enterprise Edition o Java EE en la versión 1.5. La versión actual (2018) se llama Java EE 8.

  • J2EE 1.2 (12 de diciembre de 1999)
  • J2EE 1.3 (24 de septiembre de 2001)
  • J2EE 1.4 (11 de noviembre de 2003)
  • Java EE 5 (11 de mayo de 2006)
  • Java EE 6 (10 de diciembre de 2009)
  • Java EE 7 (28 de mayo de 2013, pero el 5 de abril de 2013 de acuerdo con el documento de especificaciones. El 12 de junio de 2013 fue la fecha de inicio planificada)
  • Java EE 8 (31 de agosto de 2017 )
Java EE fue mantenido por Oracle bajo el Proceso de comunidad de Java. El 12 de septiembre de 2017, Oracle Corporation anunció que enviaría Java EE a la Fundación Eclipse. El proyecto de nivel superior de Eclipse ha sido nombrado Eclipse Enterprise para Java (EE4J). La Fundación Eclipse se vio obligada a cambiar el nombre de Java EE porque Oracle posee la marca comercial para el nombre "Java". El 26 de febrero de 2018, se anunció que el nuevo nombre de Java EE será Jakarta EE.


Especificaciones


Java EE incluye varias especificaciones que sirven para diferentes propósitos, como generar páginas web, leer y escribir desde una base de datos de forma transaccional, administrar colas distribuidas.
Las API de Java EE incluyen varias tecnologías que amplían la funcionalidad de las API base de Java SE , tales como Enterprise JavaBeans , conectores , servlets , JavaServer Pages y varias tecnologías de servicios web .


Especificaciones web 

Servlet: Define cómo administrar las solicitudes HTTP, de forma síncrona o asíncrona. Es de bajo nivel y otras especificaciones Java EE se basan en él;
WebSocket: La API de Java para la especificación WebSocket define un conjunto de API para dar servicio a las conexiones de WebSocket;
Java Server Faces: Una tecnología para construir interfaces de usuario sin componentes;
Unified Expression Language ( EL ): Es un lenguaje simple diseñado originalmente para satisfacer las necesidades específicas de los desarrolladores de aplicaciones web. Se utiliza específicamente en Java Server Faces para unir componentes a beans (de respaldo) y en Contexts and Dependency Injection para nombrar beans, pero se puede usar en toda la plataforma.



Especificaciones del servicio web

La API de Java para RESTful Web Services brinda soporte en la creación de servicios web de acuerdo con el patrón arquitectónico Representational State Transfer (REST);
La API de Java para el procesamiento de JSON es un conjunto de especificaciones para administrar la información codificada en formato JSON;
La API Java para JSON Binding proporciona especificaciones para convertir información JSON en o desde clases Java;
Java Architecture for XML Binding permite mapear XML en objetos Java;
La API de Java para servicios web XML se puede usar para crear servicios web SOAP.


Especificaciones de la empresa

  • Contexts and Dependency Injection es una especificación para proporcionar un contenedor de inyección de dependencias, como en Spring;
  • La especificación Enterprise JavaBean ( EJB ) define un conjunto de API livianas que admitirá un contenedor de objetos (el contenedor EJB) para proporcionar transacciones (usando JTA ), llamadas a procedimientos remotos (usando RMI o RMI-IIOP ), control de concurrencia, inyección de dependencia y control de acceso para objetos comerciales. Este paquete contiene las clases e interfaces de Enterprise JavaBeans que definen los contratos entre enterprise bean y sus clientes y entre enterprise bean y el contenedor ejb.
  • Java Persistence API son especificaciones sobre mapeo relacional de objetos entre tablas de base de datos relacionales y clases Java.
  • Java Transaction API contiene las interfaces y anotaciones para interactuar con el soporte de transacciones ofrecido por Java EE. Aunque esta API abstrae de los detalles de muy bajo nivel, las interfaces también se consideran de bajo nivel y se supone que el desarrollador de aplicaciones promedio en Java EE confía en el manejo transparente de las transacciones por las abstracciones EJB de nivel superior, o usando las anotaciones proporcionadas por esta API en combinación con beans administrados CDI.
  • Java Message Service proporciona una forma común para que los programas Java creen, envíen, reciban y lean los mensajes de un sistema de mensajería empresarial.


Otras especificaciones


  • Validación: Este paquete contiene las anotaciones y las interfaces para el soporte de validación declarativa ofrecido por la API de validación de Bean. Bean Validation proporciona una forma unificada para proporcionar restricciones a los beans (por. Ej., Clases de modelos JPA) que pueden imponerse en capas cruzadas. En Java EE, JPA respeta las restricciones de validación de beans en la capa de persistencia, mientras que JSF lo hace en la capa de visualización.
  • Batch Applications: Proporciona los medios para ejecutar tareas de fondo de larga ejecución que posiblemente involucren un gran volumen de datos y que deban ejecutarse periódicamente.
  • Java EE Connector Architecture: Es una solución de tecnología basada en Java para conectar servidores de aplicaciones y sistemas de información empresarial ( EIS ) como parte de las soluciones de integración de aplicaciones empresariales ( EAI ). Esta es una API de bajo nivel dirigida a proveedores con la que el desarrollador promedio de aplicaciones normalmente no entra en contacto.

Por cuestiones de entendimiento omitiremos los perfiles web y los tiempos de ejecución certificados puesto que se consideran innecesarios dentro de la historia de Java, aclarando que no los estamos omitiendo de la historia, únicamente de el post como tal, pero si quieres el contenido completo aquí tienes los enlaces respectivos

  • Sistema de Ejecución
Java JVM y Bytecode

Un objetivo de diseño de Java es la portabilidad, lo que significa que los programas escritos para la plataforma Java deben ejecutarse de manera similar en cualquier combinación de hardware y sistema operativo con soporte de tiempo de ejecución adecuado. Esto se logra compilando el código de lenguaje Java a una representación intermedia llamada bytecode de Java, en lugar de directamente al código máquina específico de la arquitectura. Las instrucciones de bytecode de Java son análogas al código de máquina, pero están destinadas a ser ejecutadas por una máquina virtual (VM) escrita específicamente para el hardware del host. Los usuarios finales suelen utilizar Java Runtime Environment (JRE) instalado en su propia máquina para aplicaciones Java independientes, o en un navegador web para applets de Java.
Las bibliotecas estándar proporcionan una forma genérica para acceder a características específicas del host, como gráficos, subprocesos y redes .
El uso de bytecode universal hace que la transferencia sea simple. Sin embargo, la sobrecarga de la interpretación de bytecode en las instrucciones de la máquina hizo que los programas interpretados casi siempre se ejecuten más lentamente que los ejecutables nativos . Los compiladores Just- In -Time (JIT) que compilan bytecodes para código de máquina durante el tiempo de ejecución se introdujeron desde una etapa temprana. Java en sí misma es independiente de la plataforma y está adaptada a la plataforma particular para la que corre una máquina virtual Java, que traduce el bytecode de Java en el lenguaje de la máquina de la plataforma.


  • Rendimiento de Java
En el desarrollo de software, Java se consideró históricamente más lento que los lenguajes más rápidos de tercera generación como C y C ++. La razón principal es un diseño de lenguaje diferente, donde después de la compilación, los programas Java se ejecutan en una máquina virtual (JVM) en lugar de directamente en el procesador de la computadora como código nativo, al igual que los programas C y C++. El rendimiento fue motivo de preocupación debido a que se escribió mucho software empresarial en Java luego de que el lenguaje se popularizó rápidamente a fines de la década de 1990 y principios de la siguiente.

Desde finales de la década de 1990, la velocidad de ejecución de los programas Java mejoró significativamente mediante la introducción de la compilación justo a tiempo (JIT) (en 1997 para Java 1.1 ), la adición de funciones de lenguaje que admiten un mejor código análisis y optimizaciones en la JVM (como HotSpot convirtiéndose en el valor predeterminado para la JVM de Sun en 2000). La ejecución de hardware de bytecode de Java, como la ofrecida por Jazelle de ARM , también puede ofrecer importantes mejoras de rendimiento.

El rendimiento de un programa Java compilado en Java bytecode depende de cuán óptimamente las tareas administradas son administradas por la máquina virtual Java del servidor (JVM) y qué tan bien explota la JVM las características del hardware del equipo y del sistema operativo (SO) al hacerlo. Por lo tanto, cualquier prueba o comparación de rendimiento de Java siempre debe informar la versión, el proveedor, el sistema operativo y la arquitectura de hardware de la JVM utilizada. De manera similar, el rendimiento del programa compilado nativo equivalente dependerá de la calidad de su código máquina generado, por lo que la prueba o comparación también debe informar el nombre, la versión y el proveedor del compilador utilizado, y sus directivas de optimización del compilador activadas. .


  • Métodos de optimización de máquinas virtuales 


Muchas optimizaciones han mejorado el rendimiento de la JVM a lo largo del tiempo. Sin embargo, aunque Java a menudo fue la primera máquina virtual en implementarlos con éxito, también se han utilizado en otras plataformas similares.


  • Compilación justo a tiempo (Just-in-time)



Historia 

El primer compilador JIT publicado generalmente se atribuye al trabajo en LISP realizado por John McCarthy en 1960. En su papel seminal Funciones recursivas de expresiones simbólicas y su cálculo por máquina, Parte I, menciona funciones que se traducen durante el tiempo de ejecución, ahorrando así la necesidad de guardar la salida del compilador para perforar tarjetas (aunque esto se conocería más exactamente como un "sistema de compilación y avance"). Otro ejemplo temprano fue el de Ken Thompson, quien en 1968 dio una de las primeras aplicaciones de expresiones regulares, aquí para la coincidencia de patrones en el editor de texto QED. En cuanto a la velocidad, Thompson implementó la coincidencia de expresión regular mediante JITing con el código IBM 7094 en el sistema compatible de tiempo compartido. Una técnica influyente para derivar el código compilado de la interpretación fue iniciada por Mitchell en 1970, que implementó para el lenguaje experimental LC.

Smalltalk ( c.1983 ) fue pionero en nuevos aspectos de las compilaciones de JIT. Por ejemplo, la traducción al código de máquina se hizo a pedido, y el resultado se guardó en caché para su uso posterior. Cuando la memoria escaseaba, el sistema borraba parte de este código y lo regeneraba cuando era necesario nuevamente. El lenguaje propio de Sun mejoró estas técnicas extensamente y fue en un momento el sistema más rápido de Smalltalk en el mundo; logrando hasta la mitad de la velocidad del lenguaje C optimizado pero con un lenguaje completamente orientado a objetos. 

Self fue abandonado por Sun, pero la investigación fue hacia el lenguaje Java. El término "compilación justo a tiempo" fue tomado del término de fabricación " Justo a tiempo " y popularizado por Java, con James Gosling utilizando el término en 1993. Actualmente JITing es utilizado por la mayoría de las implementaciones de la Máquina Virtual de Java, ya que HotSpot se basa y usa ampliamente esta base de investigación. 

El proyecto de HP Dynamo era un compilador JIT experimental en el que el formato 'bytecode' y el formato de código de máquina eran los mismos; el sistema convirtió el código de máquina PA-6000 en código de máquina PA-8000. Contrariamente, esto dio como resultado aceleraciones, en algunos casos del 30% ya que esto permitía optimizaciones en el nivel de código de máquina, por ejemplo, inlining code para mejor uso de caché y optimizaciones de llamadas a bibliotecas dinámicas y muchas otras optimizaciones de tiempo de ejecución

Las primeras JVM siempre interpretaron bytecodes de Java. Esto tuvo una gran penalización de rendimiento de entre un factor de 10 y 20 para Java en comparación con C en aplicaciones promedio. Para combatir esto, se introdujo un compilador Just-In-Time (JIT) en Java 1.1. Debido al alto costo de compilación, se introdujo un sistema adicional llamado HotSpot en Java 1.2 y se convirtió en el predeterminado en Java 1.3. Al utilizar este marco, la máquina virtual Java analiza continuamente el rendimiento del programa para los puntos conflictivos que se ejecutan con frecuencia o repetidamente. Estos se enfocan en la optimización, lo que lleva a la ejecución de alto rendimiento con un mínimo de sobrecarga para un código de menor rendimiento crítico. Algunos puntos de referencia muestran un aumento de velocidad de 10 veces por este medio. Sin embargo, debido a limitaciones de tiempo, el compilador no puede optimizar completamente el programa y, por lo tanto, el programa resultante es más lento que las alternativas de código nativo.

Compilación justo a tiempo ( JIT ), (también traducción dinámica o compilación en tiempo de ejecución ), es una forma de ejecutar código de computadora que involucra compilación durante la ejecución de un programa, en tiempo de ejecución, en lugar de antes de la ejecución. En la mayoría de los casos, esto consiste en un código fuente o, más comúnmente, una traducción de bytecode a código máquina., que luego se ejecuta directamente. Un sistema que implementa un compilador JIT normalmente analiza continuamente el código que se está ejecutando e identifica partes del código donde la aceleración obtenida de la compilación o la recompilación sería mayor que la sobrecarga de la compilación de ese código.

La compilación de JIT es una combinación de los dos enfoques tradicionales de traducción a código de máquina: compilación anticipada (AOT) e interpretación, y combina algunas ventajas e inconvenientes de ambos. A grandes rasgos, la compilación de JIT combina la velocidad del código compilado con la flexibilidad de interpretación, con la sobrecarga de un intérprete y la sobrecarga adicional de compilar (no solo interpretar). La compilación JIT es una forma de compilación dinámica, y permite la optimización adaptativa, como la recompilación dinámica; por lo tanto, en teoría, la compilación JIT puede producir una ejecución más rápida que la compilación estática. La interpretación y la compilación de JIT son particularmente adecuadas para lenguajes de programación dinámicos, ya que el sistema de tiempo de ejecución puede manejar tipos de datos con límite de entrega y aplicar garantías de seguridad.


Aplicaciones 

La compilación JIT se puede aplicar a algunos programas, o se puede usar para ciertas capacidades, particularmente capacidades dinámicas tales como expresiones regulares. Por ejemplo, un editor de texto puede compilar una expresión regular proporcionada en tiempo de ejecución para el código de la máquina para permitir una coincidencia más rápida; esto no puede hacerse con anticipación, ya que el patrón solo se proporciona en el tiempo de ejecución. Varios entornos de tiempo de ejecución modernos se basan en la compilación de JIT para la ejecución de código de alta velocidad, incluida la mayoría de las implementaciones de Java, junto con el Framework .NET de Microsoft. Del mismo modo, muchas bibliotecas de expresiones regulares presentan compilación JIT de expresiones regulares, ya sea en código de bytes o en código de máquina. La compilación JIT también se usa en algunos emuladores, para traducir el código de máquina de una arquitectura de CPU a otra.

Una implementación común de la compilación de JIT es primero tener compilación de AOT a bytecode ( código de máquina virtual ), conocida como compilación bytecode, y luego tener compilación JIT para código de máquina (compilación dinámica), en lugar de interpretación del bytecode. Esto mejora el rendimiento del tiempo de ejecución en comparación con la interpretación, a costa del retraso debido a la compilación. Los compiladores JIT se traducen de forma continua, como ocurre con los intérpretes, pero el almacenamiento en caché del código compilado minimiza el retraso en la ejecución futura del mismo código durante una ejecución determinada. Como solo se compila una parte del programa, hay una demora significativamente menor que si se compilara todo el programa antes de la ejecución.

Descripción general 


En un sistema compilado por código de bytes, el código fuente se traduce a una representación intermedia conocida como bytecode. Bytecode no es el código de máquina para ninguna computadora en particular, y puede ser portátil entre las arquitecturas de computadora. El bytecode puede ser interpretado o ejecutado en una máquina virtual . El compilador JIT lee los códigos de bytes en muchas secciones (o en su totalidad, raramente) y los compila dinámicamente en código de máquina para que el programa pueda ejecutarse más rápido. Esto se puede hacer por archivo, por función o incluso en cualquier fragmento de código arbitrario; el código se puede compilar cuando está a punto de ejecutarse (de ahí el nombre "just-in-time"), y luego se almacena en caché y se reutiliza más adelante sin necesidad de volver a compilarlo.

Por el contrario, una máquina virtual interpretada tradicional simplemente interpretará el bytecode, generalmente con un rendimiento mucho menor. Algunos intérpretes incluso interpretan el código fuente, sin el paso de compilar primero a bytecode, con un rendimiento aún peor. El código compilado estadísticamente o el código nativo se compila antes de la implementación. Un entorno de compilación dinámica es uno en el que el compilador se puede usar durante la ejecución. Un objetivo común del uso de técnicas JIT es alcanzar o superar el rendimiento de la compilación estática, manteniendo las ventajas de la interpretación de bytecode: gran parte del "trabajo pesado" de analizar el código fuente original y realizar la optimización básica a menudo se maneja en tiempo de compilación. antes de la implementación: la compilación de bytecode a código de máquina es mucho más rápida que la compilación desde la fuente. El bytecode desplegado es portátil, a diferencia del código nativo. Como el tiempo de ejecución tiene control sobre la compilación, como bytecode interpretado, puede ejecutarse en un entorno seguro. Los compiladores de bytecode a código de máquina son más fáciles de escribir, porque el compilador de bytecode portátil ya ha hecho gran parte del trabajo.

El código JIT generalmente ofrece un rendimiento mucho mejor que el de los intérpretes. Además, en algunos casos puede ofrecer un mejor rendimiento que la compilación estática, ya que muchas optimizaciones solo son factibles en tiempo de ejecución:
  1. La compilación puede optimizarse para la CPU objetivo y el modelo del sistema operativo donde se ejecuta la aplicación. Por ejemplo, JIT puede elegir instrucciones de CPU de vector SSE2 cuando detecta que la CPU las admite. Sin embargo, actualmente no existe un JIT convencional que implemente esto. Para obtener este nivel de especificidad de optimización con un compilador estático, uno debe compilar un binario para cada plataforma / arquitectura deseada, o bien incluir múltiples versiones de partes del código dentro de un solo binario.
  2.  El sistema puede recopilar estadísticas sobre cómo el programa se está ejecutando realmente en el entorno en el que se encuentra, y puede reorganizar y recompilar para un rendimiento óptimo. Sin embargo, algunos compiladores estáticos también pueden tomar información de perfil como entrada.
  3. El sistema puede realizar optimizaciones globales de código (por ejemplo, alineación de funciones de biblioteca) sin perder las ventajas de la vinculación dinámica y sin los gastos indirectos inherentes a los compiladores y enlazadores estáticos. Específicamente, al realizar sustituciones en línea globales, un proceso de compilación estática puede necesitar verificaciones en tiempo de ejecución y garantizar que se produzca una llamada virtual si la clase real del objeto prevalece sobre el método en línea, y es posible que haya que procesar las comprobaciones de condición de frontera dentro de los bucles. Con la compilación justo a tiempo, en muchos casos este procesamiento se puede mover fuera de los bucles, a menudo dando grandes aumentos de velocidad.
  4. Aunque esto es posible con los lenguajes recolectados de basura compilados estáticamente, un sistema de bytecode puede reorganizar más fácilmente el código ejecutado para una mejor utilización de la memoria caché.

Retardo de inicio y optimizaciones 

JIT provoca un retraso leve y notable en la ejecución inicial de una aplicación, debido al tiempo necesario para cargar y compilar el bytecode. A veces, este retraso se denomina "retraso de tiempo de inicio". En general, mientras más optimización realice el JIT, mejor será el código que generará, pero el retardo inicial también aumentará. Por lo tanto, un compilador JIT tiene que hacer una compensación entre el tiempo de compilación y la calidad del código que espera generar. El tiempo de inicio puede aumentar las operaciones vinculadas a IO además de la compilación JIT: por ejemplo, el archivo de datos de clase rt.jar para Java Virtual Machine (JVM) es 40 MB y la JVM debe buscar una gran cantidad de datos en este enorme archivo contextual.

Una posible optimización, utilizada por la máquina virtual HotSpot Java de Sun , es combinar la interpretación y la compilación JIT. El código de la aplicación se interpreta inicialmente, pero la JVM supervisa qué secuencias de bytecode se ejecutan con frecuencia y los traduce a código de máquina para su ejecución directa en el hardware. Para bytecode que se ejecuta solo unas pocas veces, esto ahorra tiempo de compilación y reduce la latencia inicial; para bytecode ejecutado con frecuencia, la compilación JIT se utiliza para ejecutar a alta velocidad, después de una fase inicial de interpretación lenta. Además, dado que un programa pasa la mayor parte del tiempo ejecutando una minoría de su código, el tiempo de compilación reducido es significativo. Finalmente, durante la interpretación inicial del código, las estadísticas de ejecución se pueden recopilar antes de la compilación, lo que ayuda a realizar una mejor optimización.

La compensación correcta puede variar debido a las circunstancias. Por ejemplo, la máquina virtual Java tiene dos modos principales: cliente y servidor. En el modo cliente, se realiza una compilación y optimización mínimas para reducir el tiempo de inicio. En el modo servidor, se realiza una amplia compilación y optimización para maximizar el rendimiento una vez que la aplicación se está ejecutando, sacrificando el tiempo de inicio. Otros compiladores Java just-in-time han utilizado una medida de tiempo de ejecución de la cantidad de veces que un método se ha ejecutado combinado con el tamaño del código de bytes de un método como heurística para decidir cuándo compilar. Otro usa el número de veces ejecutadas combinadas con la detección de bucles. En general, es mucho más difícil predecir con precisión qué métodos optimizar en las aplicaciones de ejecución corta que en las de ejecución prolongada. 


Native Image Generator (Ngen) de Microsoft es otro enfoque para reducir el retraso inicial. Ngen precompila (o "pre-JITs") bytecode en una imagen de Lenguaje Intermedio Común en el código nativo de la máquina. Como resultado, no se necesita compilación de tiempo de ejecución. .NET Framework 2.0 incluido con Visual Studio 2005 ejecuta Ngen en todas las bibliotecas DLL de Microsoft justo después de la instalación. El prejuego proporciona una forma de mejorar el tiempo de inicio. Sin embargo, la calidad del código que genera puede no ser tan buena como la que está JIT, por las mismas razones por las cuales el código se compila estáticamente, sin optimización guiada por perfil, no puede ser tan bueno como el código compilado JIT en el caso extremo: la falta de datos de generación de perfiles para conducir, por ejemplo, el almacenamiento en caché en línea. 

También existen implementaciones Java que combinan un compilador AOT (anticipado) con un compilador JIT ( Excelsior JET ) o un intérprete ( Compilador GNU para Java ).


Seguridad 

La compilación de JIT utiliza fundamentalmente datos ejecutables, y por lo tanto plantea desafíos de seguridad y posibles exploits.

La implementación de la compilación JIT consiste en compilar código fuente o código de bytes para código de máquina y ejecutarlo. Esto generalmente se hace directamente en la memoria: el compilador JIT envía el código de máquina directamente a la memoria y lo ejecuta inmediatamente, en lugar de enviarlo al disco y luego invocar el código como un programa separado, como en la compilación previa habitual. En las arquitecturas modernas esto presenta un problema debido a la protección del espacio ejecutable: la memoria arbitraria no se puede ejecutar, ya que de lo contrario existe un potencial agujero de seguridad. Por lo tanto, la memoria debe estar marcada como ejecutable; por razones de seguridad, esto debe hacerse después de que el código se haya escrito en la memoria y marcado como de solo lectura, ya que la memoria grabable / ejecutable es un agujero de seguridad (consulte W ^ X ).[ Por ejemplo, el compilador JIT de Firefox para Javascript introdujo esta protección en una versión de lanzamiento con Firefox 46

La pulverización JIT es una clase de exploits de seguridad informática que utiliza la compilación JIT para la pulverización en montón : la memoria resultante es ejecutable, lo que permite un exploit si la ejecución se puede mover


Optimización adaptativa

La optimización adaptativa es un método en ciencias de la computación que realiza la recompilación dinámica de partes de un programa basado en el perfil de ejecución actual. Con una implementación simple, un optimizador adaptativo puede simplemente hacer una compensación entre las instrucciones de compilación e interpretación justo a tiempo. En otro nivel, la optimización adaptativa puede explotar las condiciones de los datos locales para optimizar las sucursales alejadas y usar la expansión en línea.
Una máquina virtual Java como HotSpot también puede desoptimizar el código anteriormente JITed. Esto permite realizar optimizaciones agresivas (y potencialmente inseguras), a la vez que se puede desoptimizar el código y volver a una ruta segura.


IMPORTANTE:
Java SE 11.0.2 es la última versión de Java SE Platform. Oracle recomienda encarecidamente que todos los usuarios de Java SE actualicen a esta versión



















Publicar un comentario

0 Comentarios

This XML file does not appear to have any style information associated with it. The document tree is shown below.