Articulo de referencia

Java (plataforma de software)

{{cite press release\n |url = https://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960123.10561.xml |archive-url=https://web.archive.org/web/20080205101616/http://www.sun.com...

Escucha este artículo

TuxGuitar , un programa basado en Java.

Java es un conjunto de software y especificaciones que proporciona una plataforma para desarrollar aplicaciones y desplegarlas en un entorno informático multiplataforma . Java se utiliza en una amplia variedad de plataformas, desde dispositivos integrados y teléfonos móviles hasta servidores empresariales y supercomputadoras . Los applets de Java , menos comunes que las aplicaciones Java independientes, se ejecutaban habitualmente en entornos seguros y aislados para ofrecer muchas de las funcionalidades de las aplicaciones nativas mediante su integración en páginas HTML .

Escribir en el lenguaje de programación Java es la principal forma de producir código que se implementará como código de bytes en una máquina virtual Java (JVM); también hay compiladores de código de bytes disponibles para otros lenguajes, incluidos Ada , JavaScript , Kotlin (el lenguaje preferido de Android de Google), Python y Ruby . Además, varios lenguajes han sido diseñados para ejecutarse de forma nativa en la JVM, incluidos Clojure , Groovy y Scala . La sintaxis de Java toma prestado en gran medida de C y C++ , pero las características orientadas a objetos están modeladas a partir de Smalltalk y Objective-C . [ 9 ] Java evita ciertas construcciones de bajo nivel como los 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 las actualmente compatibles con Oracle, pueden usar la optimización de análisis de escape para asignar en la pila en su lugar) y todas las variables de tipos de objeto son referencias . La administración de memoria se maneja a través de la recolección de basura automática integrada realizada por la JVM.

Última versión

La última versión es Java  26 , lanzada en marzo de 2026.

La última versión de soporte a largo plazo (LTS), Java  25, lanzada en septiembre de 2025, es una de las pocas versiones LTS que aún reciben soporte, hasta Java 8 LTS. El soporte extendido de Oracle para Java  6 finalizó en diciembre de 2018. [ 10 ]

Como plataforma de código abierto, Java cuenta con numerosos distribuidores, entre ellos Amazon , IBM , Azul Systems y AdoptOpenJDK . Algunas distribuciones incluyen Amazon Corretto, Zulu, AdoptOpenJDK y Liberica. En cuanto a Oracle, distribuye Java 8 y también ofrece, por ejemplo, Java 11, ambas versiones LTS con soporte vigente. Oracle (y otros) recomiendan encarecidamente desinstalar versiones anteriores de Java [ 11 ] debido a los graves riesgos derivados de problemas de seguridad sin resolver. [ 12 ] [ 13 ] [ 14 ]

Dado que Java  9 (así como las versiones 10, 12-16, 18-20 y 22-24) ya no cuentan con soporte, Oracle recomienda a sus usuarios que "transicionen inmediatamente" a una versión compatible.

Oracle lanzó la última actualización pública gratuita para uso comercial de la versión anterior de Java  8  LTS en enero de 2019, y seguirá ofreciendo soporte para Java  8 con actualizaciones públicas para uso personal de forma indefinida.

Plataforma

La plataforma Java es un conjunto de programas que facilitan el desarrollo y la ejecución de programas escritos en el lenguaje de programación Java . Una plataforma Java incluye un motor de ejecución (denominado máquina virtual ), un compilador y un conjunto de bibliotecas ; también puede incluir servidores adicionales y bibliotecas alternativas según los requisitos. Las plataformas Java se han implementado para una amplia variedad de hardware y sistemas operativos con el fin de que los programas Java se ejecuten de forma idéntica en todos ellos.

La plataforma Java consta de varios programas, cada uno de los cuales proporciona una parte de sus capacidades generales. Por ejemplo, el compilador Java , que convierte el código fuente Java en bytecode Java (un lenguaje intermedio para la JVM), se incluye en el Kit de Desarrollo de Java (JDK). El Entorno de Ejecución de Java (JRE), que complementa a la JVM con un compilador justo a tiempo (JIT) , convierte el bytecode intermedio en código máquina nativo sobre la marcha. La plataforma Java también incluye un amplio conjunto de bibliotecas.

Los componentes esenciales de la plataforma son el compilador del lenguaje Java, las bibliotecas y el entorno de ejecución en el que se ejecuta el código intermedio de Java de acuerdo con las reglas establecidas en la especificación de la máquina virtual.

Dominios de aplicación

Las distintas plataformas se dirigen a diferentes clases de dispositivos y dominios de aplicación :

  • Java Card : Una tecnología que permite ejecutar de forma segura pequeñas aplicaciones basadas en Java ( applets ) en tarjetas inteligentes y dispositivos similares con poca memoria.
  • Java ME (Micro Edition): Especifica varios conjuntos de bibliotecas (conocidos como perfiles) para dispositivos con capacidades limitadas de almacenamiento, pantalla y energía. Se utiliza frecuentemente para desarrollar aplicaciones para dispositivos móviles, PDA, decodificadores de TV e impresoras.
  • Java SE (Edición Estándar): Para uso general en ordenadores de sobremesa, servidores y dispositivos similares.
  • Jakarta EE (Enterprise Edition): Java  SE más varias API que son útiles para aplicaciones empresariales cliente-servidor de múltiples niveles .

Java SE

Java Platform, Standard Edition (Java SE) es una plataforma informática , un estándar técnico para la ejecución de aplicaciones en plataformas independientes compatibles con Java como código portable para entornos de escritorio y servidor . [ 15 ] [ 16 ] Java SE se conocía anteriormente como Java 2 Platform, Standard Edition (J2SE).

La plataforma utiliza el lenguaje de programación Java y forma parte de la familia de plataformas de software Java. Java SE define una gama de API de propósito general , como las API de Java para la biblioteca de clases de Java , e incluye también la especificación del lenguaje Java y la especificación de la máquina virtual Java . [ 17 ] OpenJDK es la implementación de referencia oficial desde la versión 7. [ 18 ] [ 19 ] [ 20 ]

Yakarta EE

Jakarta EE , anteriormente Java Platform, Enterprise Edition (Java EE) y Java 2 Platform, Enterprise Edition (J2EE), es un conjunto de especificaciones que extiende Java SE [ 21 ] con especificaciones para características empresariales como computación distribuida y servicios web . [ 22 ] Las aplicaciones Jakarta EE se ejecutan en entornos 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án implementando.

máquina virtual Java

El núcleo de la plataforma Java es la "máquina virtual" que ejecuta los programas de código de bytes de Java . Este código de bytes es el mismo independientemente del hardware o sistema operativo en el que se ejecute el programa. Sin embargo, las versiones más recientes, como Java  10 (y anteriores), han introducido pequeños cambios, lo que significa que, en general, el código de bytes solo es compatible hacia adelante . Dentro de la máquina virtual de Java (JVM) existe un compilador justo a tiempo (JIT) . El compilador JIT traduce el código de bytes de Java a instrucciones nativas del procesador en tiempo de ejecución y almacena en caché el código nativo en la memoria durante la ejecución.

El uso de bytecode como lenguaje intermedio permite que los programas Java se ejecuten en cualquier plataforma que tenga una máquina virtual disponible. El uso de un compilador JIT significa que las aplicaciones Java, después de un breve retraso durante la carga y una vez que se han "calentado" al ser compiladas total o mayoritariamente con JIT, tienden a ejecutarse casi tan rápido como los programas nativos. [ 23 ] [ 24 ] [ 25 ] Desde la versión 1.2 de JRE, la implementación de JVM de Sun ha incluido un compilador justo a tiempo en lugar de un intérprete.

Si bien los programas Java son multiplataforma o independientes de la plataforma, el código de las máquinas virtuales Java (JVM) que los ejecutan no lo es. Cada plataforma operativa compatible tiene su propia JVM.

Kit de desarrollo de Java

El Java Development Kit (JDK) es un kit de desarrollo de software para el desarrollo de una aplicación de plataforma Java . [ 26 ]

El JDK está diseñado principalmente para comunicarse con el Entorno de Ejecución de Java (JRE), pero puede reemplazarse por otros lenguajes basados ​​en JDK que pueden comunicarse con el JRE y la JVM . Además, el código de bytes de Java se puede compilar estáticamente directamente a código nativo solo con una JVM, sin necesidad de que el entorno de ejecución de Java se ejecute dinámicamente.

Implementa la Especificación del Lenguaje Java (JLS) y la Especificación de la Máquina Virtual Java (JVMS), y proporciona la Edición Estándar (SE) de la Interfaz de Programación de Aplicaciones Java (API). Es una derivación de OpenJDK, impulsado por la comunidad y administrado por Oracle. [ 27 ] Proporciona software para trabajar con aplicaciones Java. Algunos ejemplos del software incluido son la máquina virtual Java, un compilador, herramientas de monitorización del rendimiento, un depurador y otras utilidades que Oracle considera útiles para los programadores Java.

Oracle distribuye la versión actual del software bajo la licencia gratuita Oracle No-Fee Terms and Conditions (NFTC). Oracle publica binarios para la arquitectura x86-64 para sistemas operativos Windows , macOS y Linux , y para la arquitectura aarch64 para macOS y Linux. Las versiones anteriores eran compatibles con el sistema operativo Oracle Solaris y la arquitectura SPARC .

La implementación principal de la JVMS de Oracle se conoce como HotSpot .

Entorno de ejecución de Java

El Entorno de Ejecución de Java (JRE), distribuido por Oracle, es un software de libre distribución que incluye una JVM independiente (HotSpot) , la biblioteca estándar de Java ( biblioteca de clases de Java ), una herramienta de configuración y, hasta su descontinuación en JDK 9, un complemento para navegadores. Es el entorno Java más común instalado en ordenadores personales , tanto portátiles como de sobremesa . Los teléfonos móviles, incluidos los teléfonos básicos y los primeros smartphones que incluyen una JVM, suelen tener una JVM diseñada para ejecutar aplicaciones dirigidas a la Micro Edition de la plataforma Java. Por otro lado, la mayoría de los smartphones, tabletas y otros ordenadores portátiles modernos que ejecutan aplicaciones Java suelen hacerlo mediante el sistema operativo Android , que incluye una máquina virtual de código abierto incompatible con la especificación de la JVM. (En cambio, las herramientas de desarrollo de Android de Google toman programas Java como entrada y generan código de bytes Dalvik , que es el formato de entrada nativo para la máquina virtual en dispositivos Android). La última versión de Critical Path Update de JRE con un acuerdo Oracle BCL [ 28 ] fue 8u201 y la última versión de Patch Set Update con la misma licencia fue 8u202. [ 29 ] [ 30 ] La última implementación de Oracle JRE, independientemente de su esquema de licencia, fue 9.0.4. [ 31 ] Desde Java Platform SE 9, toda la plataforma también se agrupó en módulos . [ 32 ] La modularización de las implementaciones de Java SE permite a los desarrolladores agrupar sus aplicaciones con todos los módulos que utilizan, en lugar de depender únicamente de la presencia de una implementación de Java SE adecuada en el dispositivo del usuario. [ 33 ] [ 34 ] [ 35 ] [ 36 ]

Bibliotecas de clases

En la mayoría de los sistemas operativos modernos , se proporciona una gran cantidad de código reutilizable para simplificar el trabajo del programador. Este código suele estar disponible como un conjunto de bibliotecas de carga dinámica que las aplicaciones pueden utilizar en tiempo de ejecución. Dado que la plataforma Java no depende de ningún sistema operativo específico, las aplicaciones no pueden depender de las bibliotecas preexistentes del sistema operativo. En su lugar, la plataforma Java proporciona un conjunto completo de sus propias bibliotecas de clases estándar que contienen muchas de las mismas funciones reutilizables que se encuentran comúnmente en los sistemas operativos modernos. La mayor parte de la biblioteca del sistema también está escrita en Java. Por ejemplo, la biblioteca Swing se encarga de la interfaz de usuario y gestiona los eventos, eliminando muchas diferencias sutiles en la forma en que las distintas plataformas manejan los componentes.

Las bibliotecas de clases de Java cumplen tres funciones dentro de la plataforma Java. En primer lugar, al igual que otras bibliotecas de código estándar, proporcionan al programador un conjunto conocido de funciones para realizar tareas comunes, como mantener listas de elementos o realizar análisis de cadenas complejos. En segundo lugar, ofrecen una interfaz abstracta para tareas que normalmente dependerían en gran medida del hardware y del sistema operativo. Tareas como el acceso a la red y a los archivos suelen estar estrechamente ligadas a las implementaciones específicas de cada plataforma. Las bibliotecas implementan una capa de abstracción en el código nativo del sistema operativo java.nety java.io, a continuación, proporcionan una interfaz estándar para que las aplicaciones Java realicen dichas tareas. Finalmente, cuando alguna plataforma subyacente no admite todas las características que espera una aplicación Java, las bibliotecas de clases gestionan adecuadamente los componentes ausentes, ya sea mediante emulación para proporcionar un sustituto o, al menos, proporcionando una forma consistente de comprobar la presencia de una característica específica.

Idiomas

La palabra "Java", por sí sola, generalmente se refiere al lenguaje de programación Java, diseñado para su uso con la plataforma Java. Los lenguajes de programación suelen quedar fuera del alcance de la expresión "plataforma", aunque el lenguaje de programación Java figuraba como parte fundamental de la plataforma Java antes de Java  7. Por lo tanto, el lenguaje y el entorno de ejecución se consideraban comúnmente una sola unidad. Sin embargo, con la especificación de Java 7 se hizo un esfuerzo  por tratar más claramente el lenguaje Java y la máquina virtual Java como entidades separadas, de modo que ya no se consideran una sola unidad. [ 37 ]

Terceros han desarrollado numerosos compiladores o intérpretes para la JVM. Algunos de ellos son para lenguajes existentes, mientras que otros son extensiones del lenguaje Java. Entre ellos se incluyen:

  • BeanShell : un lenguaje de scripting ligero para Java [ 38 ] (véase también JShell )
  • Ceylon : un lenguaje de programación orientado a objetos, fuertemente tipado y estático, con énfasis en la inmutabilidad (y que ya no recibe mantenimiento desde 2023).
  • Clojure : un dialecto moderno, dinámico y funcional del lenguaje Lisp en la plataforma Java.
  • Gosu : un lenguaje de programación de propósito general basado en la JVM, publicado bajo la licencia Apache 2.0.
  • Groovy : un lenguaje estático y dinámico totalmente interoperable con Java, compatible con la sintaxis de Java, con características de Python, Ruby, Perl y Smalltalk.
  • JRuby – un intérprete de Ruby
  • Jython : un intérprete de Python
  • Kotlin : un lenguaje para JVM (y no JVM, por ejemplo, escritorio e iOS ) con total interoperabilidad con Java (el lenguaje preferido de Google para Android, su JVM, por encima de Java, que también sigue siendo compatible allí y que anteriormente se promocionó).
  • Rhino : un intérprete de JavaScript
  • Scala : un lenguaje de programación multiparadigma con sintaxis no compatible con Java, diseñado como un "Java mejorado".

Plataformas similares

El éxito de Java y su concepto de "escribe una vez, ejecuta en cualquier lugar" ha dado lugar a otros proyectos similares, en particular el .NET Framework , disponible desde 2002, que incorpora muchos de los aspectos exitosos de Java. .NET se diseñó desde cero para admitir múltiples lenguajes de programación, mientras que la plataforma Java se creó inicialmente para admitir solo el lenguaje Java, aunque desde entonces se han desarrollado muchos otros lenguajes para la JVM. Al igual que Java, los lenguajes .NET se compilan a código de bytes y se ejecutan mediante el Common Language Runtime (CLR), que tiene una finalidad similar a la de la JVM. Al igual que la JVM, el CLR proporciona gestión de memoria mediante la recolección automática de basura y permite que el código de bytes de .NET se ejecute en múltiples sistemas operativos.

.NET incluía un lenguaje similar a Java, primero llamado J++ y luego Visual J#, que era incompatible con la especificación de Java. Su desarrollo se interrumpió en 2007 y su soporte finalizó en 2015.

Actuación

La especificación de la JVM ofrece mucha flexibilidad a los desarrolladores en cuanto a los detalles de implementación. Desde Java 1.3, la JRE de Oracle incluye una JVM llamada HotSpot, diseñada para ofrecer un alto rendimiento.

Para acelerar la ejecución del código, HotSpot se basa en la compilación justo a tiempo. Para acelerar la asignación de objetos y la recolección de basura, HotSpot utiliza un montón generacional.

Montón generacional

El montón de la máquina virtual Java es el área de memoria utilizada por la JVM para la asignación dinámica de memoria . [ 39 ]

En HotSpot, el montón se divide en generaciones :

  • La generación joven almacena objetos efímeros que se crean y se desechan inmediatamente.
  • Los objetos que persisten durante más tiempo se trasladan a la generación antigua (también llamada generación permanente ). Esta memoria se subdivide en dos espacios de supervivientes donde se almacenan los objetos que sobrevivieron a la primera y a la siguiente recolección de basura.

La generación permanente (o permgen ) se utilizaba para las definiciones de clase y los metadatos asociados antes de Java 8. La generación permanente no formaba parte del montón. [ 40 ] [ 41 ] La generación permanente se eliminó en Java 8. [ 42 ]

Originalmente no existía la generación permanente, y los objetos y las clases se almacenaban juntos en la misma área. Pero como la descarga de clases ocurre con mucha menos frecuencia que la recolección de objetos, trasladar las estructuras de clases a un área específica permitió mejoras significativas en el rendimiento. [ 40 ]

Seguridad

El JRE de Java está instalado en un gran número de ordenadores. Por lo tanto, los usuarios finales con una versión desactualizada del JRE son vulnerables a muchos ataques conocidos. Esto dio lugar a la creencia generalizada de que Java es inherentemente inseguro. [ 43 ] Desde Java 1.7, el JRE de Oracle para Windows incluye la funcionalidad de actualización automática.

Antes de la descontinuación del complemento de Java para navegadores, cualquier página web podía ejecutar un applet de Java, lo que proporcionaba una superficie de ataque fácilmente accesible para sitios web maliciosos. En 2013, Kaspersky Labs informó que el complemento de Java era el método preferido por los ciberdelincuentes. Muchos paquetes de exploits que los hackers utilizan para atacar sitios web pirateados incluyen vulnerabilidades de Java. [ 44 ] Los applets de Java se eliminaron en Java 11, lanzado el 25 de septiembre de 2018.

Versiones de Java

Historia

James Gosling

Java comenzó como un proyecto interno en Sun Microsystems en diciembre de 1990, ofreciendo una alternativa a los lenguajes de programación C++/ C . El ingeniero Patrick Naughton se sentía cada vez más frustrado con el estado de las interfaces de programación de aplicaciones (API) y herramientas de Sun para C++ y C, así como con la forma en que la organización gestionaba el proyecto NeWS . Naughton informó a Scott McNealy de su plan de dejar Sun y unirse a NeXT ; McNealy le pidió que, haciéndose pasar por Dios, le enviara un correo electrónico explicándole cómo solucionar los problemas de la empresa. Naughton imaginó la creación de un pequeño equipo que pudiera trabajar de forma autónoma, sin la burocracia que estaba paralizando otros proyectos de Sun. McNealy reenvió el mensaje a otras personas importantes en Sun, y así comenzó el Proyecto Stealth . [ 45 ]

El Proyecto Stealth pronto pasó a llamarse Proyecto Verde , y James Gosling y Mike Sheridan se unieron a Naughton. Junto con otros ingenieros, comenzaron a trabajar en una pequeña oficina en Sand Hill Road en Menlo Park, California . Su objetivo era desarrollar nueva tecnología para programar electrodomésticos inteligentes de próxima generación, que Sun esperaba que ofrecieran importantes nuevas oportunidades. [ 46 ]

Inicialmente, el equipo consideró usar C++, pero lo descartó por varias razones. Dado que estaban desarrollando un sistema embebido con recursos limitados, decidieron que C++ requería demasiada memoria y que su complejidad provocaba errores de programación. La falta de recolección de basura en el lenguaje obligaba a los programadores a gestionar manualmente la memoria del sistema, una tarea compleja y propensa a errores. Al equipo también le preocupaba la falta de funcionalidades portátiles en C++ para seguridad, programación distribuida y subprocesos . Finalmente, buscaban una plataforma que se pudiera portar fácilmente a todo tipo de dispositivos.

Bill Joy había imaginado un nuevo lenguaje que combinara Mesa y C. En un documento titulado Further , propuso a Sun que sus ingenieros crearan un entorno orientado a objetos basado en C++. Inicialmente, Gosling intentó modificar y extender C++ (un desarrollo propuesto al que se refería como "C++++"), pero pronto lo abandonó en favor de crear un nuevo lenguaje, al que llamó Oak , en honor al árbol que se encontraba justo afuera de su oficina. [ 47 ]

Para el verano de 1992, el equipo pudo mostrar partes de la nueva plataforma, incluyendo el sistema operativo Green OS , el lenguaje Oak, las bibliotecas y el hardware. Su primera demostración, el 3 de septiembre de 1992, se centró en la construcción de un dispositivo asistente digital personal (PDA) llamado Star7.que tenía una interfaz gráfica y un agente inteligente llamado "Duke" para ayudar al usuario. En noviembre de ese año, el Proyecto Verde se separó para convertirse en Firstperson , una subsidiaria de propiedad total de Sun Microsystems, y el equipo se trasladó a Palo Alto, California . [ 48 ] El equipo de Firstperson tenía interés en construir dispositivos altamente interactivos, y cuando Time Warner emitió una solicitud de propuestas (RFP) para un decodificador , Firstperson cambió su objetivo y respondió con una propuesta para una plataforma de decodificador. Sin embargo, la industria del cable consideró que su plataforma daba demasiado control al usuario, por lo que Firstperson perdió su oferta frente a SGI . Un acuerdo adicional con The 3DO Company para un decodificador tampoco se materializó. Incapaz de generar interés dentro de la industria de la televisión, la empresa fue reintegrada a Sun.

Java se encuentra con la Web

Juan Gage

En junio y julio de 1994 , tras tres días de lluvia de ideas con John Gage (director científico de Sun), Gosling, Joy, Naughton, Wayne Rosing y Eric Schmidt , el equipo reorientó la plataforma hacia la World Wide Web . Consideraban que, con la llegada de navegadores web gráficos como Mosaic, Internet podría evolucionar hasta convertirse en el mismo medio altamente interactivo que habían imaginado para la televisión por cable. Como prototipo, Naughton escribió un pequeño navegador, WebRunner (llamado así por la película Blade Runner ), que pasó a llamarse HotJava [ 46 ] en 1995.  

Sun cambió el nombre del lenguaje Oak a Java después de que una búsqueda de marcas registradas revelara que Oak Technology usaba el nombre Oak . [ 49 ] Sun puso precio a las licencias de Java por debajo del costo para ganar cuota de mercado. [ 50 ] Aunque Java  1.0a estuvo disponible para su descarga en 1994, el primer lanzamiento público de Java, Java 1.0a2 con el navegador HotJava, llegó el 23 de mayo de 1995, anunciado por Gage en la conferencia SunWorld. Junto con el anuncio de Gage, Marc Andreessen , vicepresidente ejecutivo de Netscape Communications Corporation , anunció inesperadamente que los navegadores de Netscape incluirían soporte para Java. El 9 de enero de 1996, Sun Microsystems formó el grupo JavaSoft para desarrollar la tecnología. [ 51 ]

Si bien los llamados applets de Java para navegadores web ya no son el uso más popular de Java (con él, por ejemplo, se usa más en el lado del servidor) ni la forma más popular de ejecutar código en el lado del cliente (JavaScript se ha vuelto más popular), todavía es posible ejecutar Java (u otros lenguajes de JVM como Kotlin) en navegadores web, incluso después de que se haya eliminado el soporte de JVM en ellos, utilizando, por ejemplo, TeaVM .

Licencia Pública General GNU

El 13 de noviembre de 2006, Sun Microsystems puso a disposición la mayor parte de su implementación de Java bajo la Licencia Pública General de GNU (GPL). [ 52 ] [ 53 ]

Historial de versiones

El lenguaje Java ha experimentado varios cambios desde el lanzamiento del JDK ( Java Development Kit ) 1.0 el 23 de enero de 1996, así como numerosas adiciones de clases y paquetes a la biblioteca estándar . Desde J2SE  1.4, el Java Community Process (JCP) ha regido la evolución del lenguaje Java. El JCP utiliza las Java Specification Requests (JSR) para proponer y especificar adiciones y cambios a la plataforma Java. La Java Language Specification (JLS) especifica el lenguaje; los cambios a la JLS se gestionan bajo la JSR  901. [ 54 ]

Sun lanzó JDK 1.1 el 19 de febrero de 1997. Entre las principales novedades se incluyeron una amplia renovación del modelo de eventos del Abstract Window Toolkit (AWT), la adición de clases internas al lenguaje, JavaBeans y la conectividad de bases de datos Java (JDBC).

J2SE 1.2 (8 de diciembre de 1998) – Nombre en clave Playground . Esta y las versiones posteriores hasta J2SE  5.0 fueron renombradas como Java 2 y el nombre de la versión "J2SE" ( Java 2 Platform, Standard Edition ) reemplazó a JDK para distinguir la plataforma base de J2EE ( Java 2 Platform, Enterprise Edition ) y J2ME ( Java 2 Platform, Micro Edition ). Las principales adiciones incluyeron reflexión , un marco de colecciones , Java IDL (una implementación de lenguaje de descripción de interfaz para la interoperabilidad CORBA ) y la integración de la API gráfica Swing en las clases principales. Se lanzó un complemento de Java (desde entonces los proveedores de navegadores web han eliminado el soporte para, y ahora está obsoleto para la eliminación de la base de código Java y será eliminado por Java 26 en 2026 [ 55 ] ), y la JVM de Sun fue equipada con un compilador JIT por primera vez.

J2SE 1.3 (8 de mayo de 2000) – Nombre en clave Kestrel . Entre los cambios más destacados se incluyeron la incorporación de la JVM HotSpot (la JVM HotSpot se lanzó por primera vez en abril de 1999 para la  JVM J2SE 1.2), JavaSound , la interfaz de nombres y directorios de Java (JNDI) y la arquitectura de depuración de la plataforma Java (JPDA).

J2SE 1.4 (6 de febrero de 2002) – Nombre en clave Merlin . Esta se convirtió en la primera versión de la plataforma Java desarrollada bajo el Proceso de la Comunidad Java como JSR  59. [ 56 ] Los cambios principales incluyeron expresiones regulares modeladas a partir de Perl , encadenamiento de excepciones , un analizador XML integrado y un procesador XSLT ( JAXP ) y Java Web Start .

J2SE 5.0 (30 de septiembre de 2004) – Nombre en clave Tiger . Originalmente se numeró como 1.5, que todavía se usa como número de versión interna. [ 57 ] Desarrollado bajo JSR  176, Tiger agregó varias características nuevas e importantes del lenguaje, incluyendo el bucle for-each , los genéricos , el autoboxing y los var-args . [ 58 ]

Java SE 6 (11 de diciembre de 2006) – Nombre en clave Mustang . Se incluyó con un gestor de bases de datos y facilita el uso de lenguajes de scripting con la JVM (como JavaScript usando el motor Rhino de Mozilla ). A partir de esta versión, Sun reemplazó el nombre "J2SE" por Java SE y eliminó el ".0" del número de versión. [ 59 ] Otros cambios importantes incluyen soporte para anotaciones conectables ( JSR 269 ), muchas mejoras de la GUI , incluyendo mejoras nativas de la interfaz de usuario para admitir la apariencia de Windows Vista , y mejoras en la arquitectura del depurador de la plataforma Java (JPDA) y la interfaz de herramientas de la JVM para una mejor supervisión y resolución de problemas.  

Java SE 7 (28 de julio de 2011) – Nombre en clave Dolphin . Esta versión se desarrolló bajo JSR  336. [ 60 ] Añadió muchos cambios menores en el lenguaje, incluyendo cadenas en switch, try-with-resources e inferencia de tipos para la creación de instancias genéricas. La JVM se extendió con soporte para lenguajes dinámicos, mientras que la biblioteca de clases se extendió, entre otras cosas, con un marco join/fork, [ 61 ] una nueva biblioteca de E/S de archivos mejorada y soporte para nuevos protocolos de red como SCTP . Java  7 Update 76 se lanzó en enero de 2015, con fecha de vencimiento el 14 de abril de 2015. [ 62 ]

En junio de 2016, después de la última actualización pública de Java  7, [ 63 ] se anunciaron fallos de seguridad " explotables remotamente " en Java 6, 7 y 8. [ 13 ] 

Java SE 8 (18 de marzo de 2014) Nombre en clave Kenai . Entre los cambios notables se incluyen la compatibilidad a nivel de lenguaje con expresiones lambda ( cierres ) y métodos predeterminados, el entorno de ejecución JavaScript Project Nashorn, una nueva API de fecha y hora inspirada en Joda Time y la eliminación de PermGen. Esta versión no cuenta con soporte oficial en la plataforma Windows XP , [ 64 ] pero se sabe que funciona allí. Por lo tanto, debido al fin del ciclo de vida de Java 7, es la versión recomendada para los usuarios de XP. Anteriormente, solo se había descrito un método de instalación manual no oficial para Windows XP SP3. Este método hace referencia a JDK8, la plataforma de desarrollo para Java que también incluye un entorno de ejecución Java completamente funcional . [ 65 ] Java 8 es compatible con Windows Server 2008 R2 SP1, Windows Vista SP2 y Windows 7 SP1, Ubuntu 12.04 LTS y versiones posteriores (y algunos otros sistemas operativos). [ 66 ]   

Java SE 9 y 10 tienen requisitos de sistema más altos, es decir Windows  7 o Server 2012 (y el navegador web mínimo certificado se elevó a Internet Explorer 11 u otros navegadores web), y Oracle eliminó la compatibilidad de 32 bits para todas las plataformas, es decir, solo las " máquinas virtuales Java (JVM) de 64 bits de Oracle están certificadas". [ 67 ]

Java SE 11 LTS se lanzó en septiembre de 2018, siendo la primera versión LTS desde que se adoptó el modelo de lanzamiento rápido a partir de la versión 9. Por primera vez, OpenJDK 11 representa el código fuente completo de la plataforma Java bajo la Licencia Pública General GNU, y aunque Oracle aún lo licencia con una licencia propietaria opcional, no hay diferencias de código ni módulos exclusivos de la versión con licencia propietaria. [ 68 ] Las características de Java  11 incluyen dos nuevas implementaciones de recolector de basura, Flight Recorder para depurar problemas profundos y un nuevo cliente HTTP con soporte para WebSocket . [ 69 ]

Java SE 12 se lanzó en marzo de 2019. [ 70 ]

Java SE 13 se lanzó en septiembre de 2019. [ 71 ]

Java SE 14 se lanzó en marzo de 2020. [ 72 ]

Java SE 15 se lanzó en septiembre de 2020.

Java SE 16 se lanzó en marzo de 2021.

Java SE 17 LTS se lanzó en septiembre de 2021.

Java SE 18 se lanzó en marzo de 2022.

Java SE 19 se lanzó en septiembre de 2022.

Java SE 20 se lanzó en marzo de 2023.

Java SE 21 LTS se lanzó en septiembre de 2023.

Java SE 22 se lanzó en marzo de 2024.

Además de los cambios en el lenguaje, se han realizado cambios significativos en la biblioteca de clases de Java a lo largo de los años, que ha crecido de unos pocos cientos de clases en JDK  1.0 a más de tres mil en J2SE  5.0. Han evolucionado API completamente nuevas, como Swing y Java 2D , y muchas de las  clases y métodos originales de JDK 1.0 han sido obsoletos (algunos de ellos "terminalmente obsoletos"), por ejemplo, los relacionados con la finalización. [ 73 ]

Al menos una API muy poco utilizada (para subprocesos) se ha eliminado de Java 22. [ 74 ] [ 75 ]

Uso

Uso de escritorio

Un programa Java que se ejecuta en un ordenador de sobremesa con Windows Vista (compatible con Java  8, pero no oficialmente con versiones posteriores, como Java  11).

Java actual es compatible con Windows 10 de 64 bits (y Server 2016) y versiones posteriores, macOS 13.x de 64 bits y versiones posteriores, y Linux de 64 bits (por ejemplo, Oracle Enterprise Linux). Otros sistemas no son compatibles con Oracle (para la compilación, pero sí con IBM, SAP, etc.), aunque se sabe que funcionan, por ejemplo, en AIX, Ubuntu, RHEL y Alphine/ musl . La compatibilidad con Windows de 32 bits está obsoleta desde Java 22 (y la JVM de 32 bits ya no se compila sin opciones no predeterminadas).

Según Oracle en 2010, el Entorno de Ejecución de Java se encontraba en más de 850 millones de PC. [ 76 ] Microsoft no ha incluido un Entorno de Ejecución de Java (JRE) con sus sistemas operativos desde que Sun Microsystems demandó a Microsoft por agregar clases específicas de Windows al entorno de ejecución de Java incluido y por hacer que las nuevas clases estuvieran disponibles a través de Visual J++ . Apple ya no incluye un entorno de ejecución de Java con OS X desde la versión 10.7 , pero el sistema solicita al usuario que lo descargue e instale la primera vez que se inicia una aplicación que requiere el JRE. Muchas distribuciones de Linux incluyen el entorno de ejecución OpenJDK como máquina virtual predeterminada, lo que elimina la necesidad de descargar el JRE propietario de Oracle. [ 77 ]

Algunas aplicaciones Java tienen un uso bastante extendido en ordenadores de escritorio, incluidos los entornos de desarrollo integrados NetBeans , Eclipse y JetBrains [ 78 ] , y clientes para compartir archivos como LimeWire y Vuze . Java también se utiliza en el entorno de programación matemática MATLAB , tanto para la representación de la interfaz de usuario como parte del sistema central. Java proporciona una interfaz de usuario multiplataforma para algunas aplicaciones colaborativas de alta gama como Lotus Notes .

Oracle planea primero descontinuar el complemento de navegador Java instalable por separado del entorno de ejecución de Java en JDK 9 y luego eliminarlo por completo de una versión futura, obligando a los desarrolladores web a utilizar una tecnología alternativa. [ 79 ]

Mascota

Duke, la mascota de Java

La mascota de Java se llama Duke. [ 80 ]

Cuando Sun anunció que Java SE y Java ME se lanzarían bajo una licencia de software libre (la Licencia Pública General de GNU ), lanzaron los gráficos de Duke bajo la licencia libre BSD al mismo tiempo. [ 81 ] Cada año se crea una nueva personalidad de Duke. [ 82 ] Por ejemplo, en julio de 2011, "Future Tech Duke" incluía una nariz más grande, una mochila propulsora y alas azules. [ 83 ]

Licencias

El código fuente de las implementaciones de Java de Sun (es decir, la implementación de referencia de facto) ha estado disponible desde hace algún tiempo, pero hasta hace poco, [ 84 ] los términos de la licencia restringían severamente lo que se podía hacer con él sin firmar (y generalmente pagar) un contrato con Sun. Por lo tanto, estos términos no satisfacían los requisitos de la Open Source Initiative ni de la Free Software Foundation para ser considerado software libre o de código abierto, y Sun Java era, por consiguiente, una plataforma propietaria. [ 85 ]

Si bien varios proyectos de terceros (por ejemplo, GNU Classpath y Apache Harmony ) crearon implementaciones parciales de Java de software libre , el gran tamaño de las bibliotecas de Sun, sumado al uso de métodos de desarrollo propio, provocó que sus implementaciones de las bibliotecas de Java (el compilador y la máquina virtual son relativamente pequeños y están bien definidos) fueran incompletas y no totalmente compatibles. Además, estas implementaciones tendían a estar mucho menos optimizadas que las de Sun.

Software gratuito

Jonathan I. Schwartz

Sun anunció en JavaOne 2006 que Java se convertiría en software libre y de código abierto , [ 86 ] y el 25 de octubre de 2006, en la conferencia Oracle OpenWorld, Jonathan I. Schwartz dijo que la compañía estaba lista para anunciar el lanzamiento de la plataforma Java principal como software libre y de código abierto dentro de 30 a 60 días. [ 87 ]

Sun lanzó la máquina virtual y el compilador Java HotSpot como software libre bajo la Licencia Pública General de GNU el 13 de noviembre de 2006, con la promesa de que el resto del JDK (que incluye el JRE) se colocaría bajo la GPL para marzo de 2007 ("excepto algunos componentes que Sun no tiene derecho a publicar en forma de código fuente distribuible bajo la GPL"). [ 88 ] Según Richard Stallman , esto significaría el fin de la "trampa de Java". [ 89 ] Mark Shuttleworth calificó el anuncio de prensa inicial como "un verdadero hito para la comunidad del software libre ". [ 90 ]

Sun publicó el código fuente de la biblioteca Class bajo la licencia GPL el 8 de mayo de 2007, excepto algunas partes limitadas que Sun había licenciado de terceros que no querían que su código se publicara bajo una licencia de software libre y de código abierto. [ 91 ] Algunas de las partes restringidas resultaron ser partes bastante clave de la plataforma, como la representación de fuentes y la rasterización 2D, pero estas fueron publicadas como código abierto más tarde por Sun (ver Biblioteca Class de OpenJDK ).

El objetivo de Sun era reemplazar las partes que seguían siendo propietarias y de código cerrado con implementaciones alternativas y hacer que la biblioteca de clases fuera completamente gratuita y de código abierto. Mientras tanto, un proyecto de terceros llamado IcedTea creó un JDK completamente gratuito y altamente utilizable reemplazando el código restringido con stubs o código de GNU Classpath . Sin embargo, OpenJDK se ha vuelto compilable sin las partes restringidas (a partir de OpenJDK 6 b10 [ 92 ] ) y se ha convertido en el entorno de ejecución predeterminado para la mayoría de las distribuciones de Linux. [ 93 ] [ 94 ] [ 95 ] [ 96 ]

En junio de 2008, se anunció que IcedTea 6 (como la versión empaquetada de OpenJDK en Fedora 9 ) había pasado las pruebas del Kit de Compatibilidad Tecnológica y podía afirmar ser una  implementación de Java 6 totalmente compatible. [ 97 ]

Debido a que OpenJDK está bajo la GPL, es posible redistribuir una versión personalizada de JRE directamente con aplicaciones de software, [ 98 ] [ 99 ] en lugar de requerir que el usuario final (o su administrador de sistemas) descargue e instale la versión correcta de Oracle JRE propietario en cada uno de sus sistemas.

Crítica

En la mayoría de los casos, la compatibilidad con Java es innecesaria en los navegadores web, y los expertos en seguridad recomiendan no ejecutarlo a menos que sea absolutamente necesario. [ 100 ] Se sugirió que, si Java es requerido por algunos sitios web, los usuarios deberían tener una instalación de navegador separada específicamente para esos sitios.

Medicamentos genéricos

Cuando se añadieron los genéricos  a Java 5.0, ya existía un amplio marco de clases (muchas de las cuales ya estaban obsoletas ), por lo que se optó por implementar los genéricos mediante borrado para permitir la compatibilidad de migración y la reutilización de estas clases existentes. Esto limitó las características que podía proporcionar esta adición en comparación con otros lenguajes. [ 101 ] [ 102 ] La adición de comodines de tipo hizo que Java fuera inestable. [ 103 ]

Tipos de enteros sin signo

Java carece de tipos de enteros sin signo nativos . Los datos sin signo se generan a menudo a partir de programas escritos en C , y la falta de estos tipos impide el intercambio directo de datos entre C y Java. Los números grandes sin signo también se utilizan en muchos campos del procesamiento numérico, incluida la criptografía, lo que puede hacer que Java sea menos conveniente para estas tareas. [ 104 ] Aunque es posible sortear parcialmente este problema con código de conversión y el uso de tipos de datos más grandes, esto hace que usar Java sea engorroso para manejar datos sin signo. Si bien un entero con signo de 32 bits puede usarse para almacenar un valor sin signo de 16 bits con relativa facilidad, un valor sin signo de 32 bits requeriría un entero con signo de 64 bits. Además, un valor sin signo de 64 bits no se puede almacenar usando ningún tipo de entero en Java porque no  existe ningún tipo mayor de 64 bits en el lenguaje Java. Si se abstrae usando funciones, las llamadas a funciones se vuelven necesarias para muchas operaciones que son nativas de algunos otros lenguajes. Alternativamente, es posible usar enteros con signo de Java para emular enteros sin signo del mismo tamaño, pero esto requiere un conocimiento detallado de operaciones bit a bit complejas. [ 105 ]

Aritmética de punto flotante

La aritmética de punto flotante de Java se basa en gran medida en la norma IEEE 754 ( Estándar para la aritmética binaria de punto flotante ), pero ciertas características no son compatibles incluso al usar el strictfpmodificador, como los indicadores de excepción y el redondeo dirigido , capacidades exigidas por la norma IEEE 754. Además, los tipos de punto flotante de precisión extendida permitidos en la norma 754 y presentes en muchos procesadores no están permitidos en Java. [ 106 ] [ 107 ] 

Actuación

En los inicios de Java (antes de que se implementara la máquina virtual HotSpot en Java 1.3 en el año 2000) hubo algunas críticas sobre su rendimiento. Las pruebas de rendimiento solían indicar que Java era aproximadamente un 50 % más lento que C (un lenguaje que se compila a código nativo). [ 108 ] [ 109 ] [ 110 ]

El rendimiento de Java ha mejorado sustancialmente desde las primeras versiones. [ 23 ] En algunas pruebas optimizadas se ha demostrado que el rendimiento de los compiladores JIT en relación con los compiladores nativos es bastante similar. [ 23 ] [ 24 ] [ 25 ]

El código de bytes de Java puede interpretarse en tiempo de ejecución mediante una máquina virtual, o bien compilarse en tiempo de carga o ejecución para generar código nativo que se ejecuta directamente en el hardware del ordenador. La interpretación es más lenta que la ejecución nativa, y la compilación en tiempo de carga o ejecución conlleva una penalización inicial en el rendimiento. Las implementaciones modernas de alto rendimiento de la JVM utilizan el método de compilación, por lo que, tras el tiempo de arranque inicial, el rendimiento es equivalente al del código nativo.

Seguridad

La plataforma Java proporciona una arquitectura de seguridad [ 111 ] diseñada para permitir al usuario ejecutar código de bytes no confiable en un entorno aislado (sandbox) para protegerse contra software malicioso o mal escrito. Esta función de "sandboxing" tiene como objetivo proteger al usuario restringiendo el acceso a ciertas características y API de la plataforma que podrían ser explotadas por malware , como el acceso al sistema de archivos local, la ejecución de comandos arbitrarios o el acceso a redes de comunicación.

En los últimos años, los investigadores han descubierto numerosas vulnerabilidades de seguridad en algunas implementaciones de Java de uso generalizado, incluida la de Oracle, que permiten que código no confiable eluda el mecanismo de aislamiento (sandboxing), exponiendo a los usuarios a ataques maliciosos. Estas vulnerabilidades afectan únicamente a las aplicaciones Java que ejecutan código de bytes arbitrario no confiable, como los complementos de navegadores web que ejecutan applets de Java descargados de sitios web públicos. Las aplicaciones en las que el usuario confía en el código que se ejecuta y tiene control total sobre él no se ven afectadas.

El 31 de agosto de 2012, se descubrió que Java  6 y 7 (ambos compatibles en ese momento) en Microsoft Windows, OS X y Linux presentaban una grave vulnerabilidad de seguridad que permitía un ataque remoto simplemente cargando una página web maliciosa. [ 112 ] Posteriormente, también se descubrió que Java 5 era vulnerable. [ 113 ]

El 10 de enero de 2013, tres especialistas en informática se pronunciaron en contra de Java, declarando a Reuters que no era seguro y que la gente debería deshabilitarlo. Jaime Blasco, gerente de laboratorios de AlienVault Labs, afirmó que "Java es un desastre. No es seguro. Hay que deshabilitarlo". [ 114 ] Esta vulnerabilidad afecta a Java 7 y no está claro si afecta a Java 6 , por lo que se sugiere que los usuarios lo deshabiliten. [ 115 ] [ 116 ] Las alertas de seguridad de Oracle anuncian los calendarios de parches críticos relacionados con la seguridad para Java. [ 117 ]

El 14 de enero de 2013, expertos en seguridad afirmaron que la actualización seguía sin proteger a los PC de los ataques. [ 118 ] Esta vulnerabilidad provocó una respuesta del Departamento de Seguridad Nacional de Estados Unidos, que instó a los usuarios a deshabilitar o desinstalar Java. [ 14 ] Apple incluyó Java en una lista negra de forma limitada para todos los ordenadores que ejecutaban su sistema operativo OS X mediante un programa antivirus. [ 119 ]

En 2014, y en respuesta a los problemas de seguridad y vulnerabilidad de Java que surgieron en ese momento, el bloguero de seguridad Brian Krebs instó a los usuarios a eliminar al menos el complemento de Java para navegadores y también el software completo. "Espero un mundo sin el complemento de Java (y sin tener que recordarles a los lectores las actualizaciones trimestrales de parches), pero probablemente pasarán años antes de que las diversas versiones de este complemento se eliminen en su mayoría de los sistemas de los usuarios finales en todo el mundo." [ 120 ] "Alguna vez prometedor, ha perdido su utilidad en el navegador y se ha convertido en una pesadilla que deleita a los ciberdelincuentes a expensas de los usuarios de computadoras." [ 121 ] "Creo que todos deberían desinstalar Java de todos sus PC y Mac, y luego pensar detenidamente si necesitan volver a instalarlo. Si eres un usuario doméstico típico, probablemente puedas prescindir de él. Si eres un usuario empresarial, puede que no tengas otra opción." [ 122 ]

Adware

El entorno de ejecución Java distribuido por Oracle tiene un historial de incluir software patrocinado que se instala por defecto durante la instalación y las actualizaciones que se lanzan aproximadamente cada mes. Esto incluye la " barra de herramientas de Ask.com ", que redirige las búsquedas del navegador a anuncios, y "McAfee Security Scan Plus". [ 123 ] Estas ofertas se pueden bloquear mediante una configuración en el Panel de control de Java, aunque no es obvio. Esta configuración se encuentra en la pestaña "Avanzado" del Panel de control de Java, en el apartado "Varios", donde la opción se denomina "Suprimir ofertas de patrocinadores".

Sistema de actualización

Java aún no ha lanzado un actualizador automático que no requiera intervención del usuario ni derechos administrativos [ 124 ] a diferencia de Google Chrome [ 125 ] y Flash Player. [ 126 ]

Véase también

Referencias

  1. "JavaSoft lanza Java 1.0" (Comunicado de prensa). Archivado del original el 5 de febrero de 2008. Consultado el 9 de febrero de 2016 .
  2. Ortíz, C. Enrique; Giguère, Éric (2001). Perfil de dispositivo de información móvil para Java 2 Micro Edition: Guía del desarrollador (PDF) . John Wiley e hijos . ISBN 978-0471034650. Consultado el 30 de mayo de 2012 .
  3. 1 2 3 4 5 6 "Lanzamientos del kit de desarrollo de Java" . Java.com . Consultado el 26 de abril de 2026 .
  4. "Grupo HotSpot" . Openjdk.java.net . Consultado el 9 de febrero de 2016 .
  5. 1 2 "Contenido de las configuraciones de sistemas certificados de Oracle JDK 8 y JRE 8" . Oracle.com . 8 de abril de 2014. Recuperado el 9 de febrero de 2016 .
  6. "Configuraciones regionales compatibles con Java SE 7" . Oracle.com . Consultado el 9 de febrero de 2016 .
  7. "OpenJDK: GPLv2 + Excepción de ruta de clases" . Openjdk.java.net. 1 de abril de 1989. Consultado el 9 de febrero de 2016 .
  8. "BCL para Java SE" . Oracle.com. 2 de abril de 2013. Consultado el 9 de febrero de 2016 .
  9. Naughton, Patrick. "Java estuvo fuertemente influenciado por Objective-C" . Escuela Virtual . Archivado del original el 13 de agosto de 2012.
  10. Alexander, Christopher. "Java SE 6 Advanced" . www.oracle.com . Consultado el 20 de mayo de 2018 .
  11. "¿Por qué debería desinstalar versiones anteriores de Java de mi sistema?" . www.java.com . Archivado del original el 12 de febrero de 2018 . Consultado el 6 de febrero de 2018 .
  12. "¿Por qué debería desinstalar versiones anteriores de Java de mi sistema?" . Oracle . Consultado el 9 de septiembre de 2016 .
  13. 1 2 "Actualización crítica de parches de Oracle - julio de 2016" . www.oracle.com .
  14. 1 2 Whittaker, Zack (11 de enero de 2013). "Seguridad Nacional advierte que se desactive Java en medio de una vulnerabilidad de día cero" . ZDNet . Recuperado el 9 de febrero de 2016 .
  15. "Descripción general de Java SE" . Oracle Corporation . Consultado el 26 de febrero de 2017 .
  16. ""Especificación de la API de la plataforma Java®, edición estándar y del kit de desarrollo de Java, versión 25"" .
  17. "Contenido de la versión Java SE 6" . Oracle Corporation y/o sus filiales . Consultado el 1 de enero de 2013 .
  18. Transición a OpenJDK como implementación de referencia oficial de Java SE 7
  19. Implementaciones de referencia de la plataforma Java, edición estándar 7
  20. "Implementaciones de referencia de la plataforma Java, edición estándar 8" . Archivado del original el 21 de noviembre de 2015.
  21. "Diferencias entre Java EE y Java SE: Tu primera taza: Una introducción a la plataforma Java EE" . Docs.oracle.com. 1 de abril de 2012. Consultado el 18 de julio de 2012 .
  22. "Descripción general de Java EE" . Oracle Corporation . Consultado el 26 de febrero de 2017 .
  23. 1 2 3 Lewis, JP; Neumann, Ulrich. "Rendimiento de Java frente a C++" . Laboratorio de Tecnología Gráfica e Inmersiva, Universidad del Sur de California .
  24. 1 2 "The Java Faster than C++ Benchmark" . Kano.net. 14 de noviembre de 2003. Consultado el 9 de febrero de 2016 .
  25. 1 2 FreeTTS – Un estudio de caso de rendimiento Archivado el 25/03/2009 en Wayback Machine , Willie Walker, Paul Lamere, Philip Kwok
  26. "Java Development Kit" . Documentación de IBM . IBM . Consultado el 27 de noviembre de 2025 .
  27. "Preguntas frecuentes de OpenJDK" . OpenJDK . Archivado del original el 7 de diciembre de 2021. Consultado el 23 de octubre de 2021 .
  28. "BCL para Java SE" . Archivado del original el 14 de agosto de 2022. Consultado el 14 de agosto de 2022 .
  29. "Explicación de las versiones de CPU y PSU de Java" . Archivado del original el 3 de noviembre de 2014.
  30. "Copia archivada" . Archivado del original el 14 de agosto de 2022. Recuperado el 14 de agosto de 2022 .{{cite web}}: CS1 mantenimiento: copia archivada como título ( enlace )
  31. "Copia archivada" . Archivado del original el 10 de agosto de 2022. Recuperado el 14 de agosto de 2022 .{{cite web}}: CS1 mantenimiento: copia archivada como título ( enlace )
  32. "Comprendiendo los módulos de Java 9" . Archivado del original el 14 de agosto de 2022. Consultado el 14 de agosto de 2022 .
  33. "Módulos Java" .
  34. "Cambios estructurales de Java 9 en el JDK y el JRE" . 30 de octubre de 2017.
  35. "Desarrollador de IBM" .
  36. "Una guía sobre la modularidad de Java 9 | Baeldung" . 18 de abril de 2018.
  37. "Capítulo 1. Introducción" . docs.oracle.com .
  38. www.beanshell.org
  39. "Preguntas frecuentes sobre la recolección de basura en la máquina virtual Java Hotspot" . Sun Microsystems . 6 de febrero de 2003. Consultado el 7 de febrero de 2009 .
  40. 1 2 Masamitsu, Jon (28 de noviembre de 2006). "Presentando a la Generación Permanente" . Archivado del original el 25 de agosto de 2016. Recuperado el 7 de febrero de 2009 .
  41. Nutter, Charles (11 de septiembre de 2008). "Una primera toma de contacto con InvokeDynamic" . Consultado el 7 de febrero de 2009 .
  42. "JEP 122: Eliminar la generación permanente" . Oracle Corporation . 4 de diciembre de 2012. Consultado el 23 de marzo de 2014 .
  43. "¿Qué es Java, es inseguro y debería usarlo?" . Lifehacker.com. 14 de enero de 2013. Consultado el 26 de junio de 2015 .
  44. "¿Existe alguna protección contra las vulnerabilidades de Java? | Kaspersky Lab" . Kaspersky.com. 9 de septiembre de 2013. Archivado del original el 4 de abril de 2015. Consultado el 26 de junio de 2015 .
  45. Southwick, Karen (1999). High Noon: la historia interna de Scott McNealy y el ascenso de Sun Microsystems . Nueva York [ua]: Wiley. págs. 120–122 . ISBN  0471297135.
  46. 1 2 Byous, Jon (abril de 2003). "Tecnología Java: Los primeros años" . Sun Microsystems . Archivado del original el 30 de mayo de 2008. Recuperado el 2 de agosto de 2009 .
  47. Southwick, Karen (1999). High Noon: la historia interna de Scott McNealy y el ascenso de Sun Microsystems . Nueva York [ua]: Wiley. pág . 124. ISBN  0471297135.
  48. Walrath, Kathy (21 de diciembre de 2001). "Prólogo" . Sun Microsystems . Consultado el 2 de agosto de 2009 .
  49. Murphy, Kieron (4 de octubre de 1996). "¿Entonces por qué decidieron llamarlo Java?" . JavaWorld . Consultado el 15 de julio de 2020 .«Los abogados nos dijeron que no podíamos usar el nombre "OAK" porque [ya estaba registrado como marca por] Oak Technologies», dijo Frank Yellin, ingeniero sénior de Sun. «Así que se organizó una sesión de lluvia de ideas para encontrar un nombre nuevo».
  50. Bank, David (1 de diciembre de 1995). "La saga de Java" . Wired . Consultado el 4 de octubre de 2022 .«Su precio está por debajo de nuestro coste», afirma Schmidt. «Esto nos genera pérdidas en el negocio de las licencias en un futuro previsible. Es una inversión estratégica para ganar cuota de mercado».
  51. "Sun Microsystems anuncia la formación de JavaSoft" (Comunicado de prensa). Sun Microsystems. 9 de enero de 1996. Archivado del original el 10 de febrero de 2008.
  52. "Sun abre Java" . Sun Microsystems. 13 de noviembre de 2006. Archivado del original el 13 de mayo de 2008.
  53. O'Hair, Kelly (diciembre de 2010). "Se eliminó la lógica de los complementos binarios de OpenJDK7 y OpenJDK6" . Oracle Corporation . Consultado el 25 de noviembre de 2011 .
  54. "El programa Java Community Process(SM) - JSRs: Java Specification Requests - detalle JSR# 63" . Jcp.org . Consultado el 9 de febrero de 2016 .
  55. "JEP 504: Eliminar la API de Applet" . openjdk.org . Consultado el 31 de octubre de 2025 .
  56. "El programa Java Community Process(SM) - JSRs: Java Specification Requests - detalle JSR# 59" . Jcp.org . Consultado el 9 de febrero de 2016 .
  57. "¿Versión 1.5.0 o 5.0?" . Java.sun.com . Consultado el 9 de febrero de 2016 .
  58. "El programa Java Community Process(SM) - JSRs: Java Specification Requests - detalle JSR# 176" . Jcp.org . Consultado el 9 de febrero de 2016 .
  59. "Nomenclatura en Java" . Java.com . Oracle . Consultado el 25 de agosto de 2011 .
  60. "El programa Java Community Process(SM) - JSRs: Java Specification Requests - detalle JSR# 336" . Jcp.org . Consultado el 9 de febrero de 2016 .
  61. Lea, Doug (13 de septiembre de 2004). "JSRs: Java Specification Requests: JSR 166: Concurrency Utilities" . Java Community Process . Oracle Corp.
  62. "Notas de la versión 76 de Java™ SE Development Kit 7" . Oracle.com . Consultado el 9 de febrero de 2016 .
  63. "Lanzamientos de Java 7 y Java 8 por fecha" . www.java.com .
  64. "Windows XP y Java" . Java.com. 8 de abril de 2014. Consultado el 9 de febrero de 2016 .
  65. "java - instalando JDK8 en Windows XP - error advapi32.dll" . Stack Overflow .
  66. "Configuraciones de sistema certificadas para Oracle JDK 8 y JRE 8" . www.oracle.com .
  67. "Configuraciones de sistema certificadas para Oracle JDK 10" . www.oracle.com . Consultado el 27 de marzo de 2018. Solo se admite el modo X.org. El modo Wayland no es compatible.
  68. "Hoja de ruta de soporte de Oracle Java SE" . Oracle Corporation . 25 de septiembre de 2018. Consultado el 25 de septiembre de 2018 .
  69. "JDK 11" . Oracle Corporation . 25 de septiembre de 2018. Consultado el 26 de septiembre de 2018 .
  70. "JDK 12" . OpenJDK . Consultado el 22 de marzo de 2019 .
  71. "JDK 13" . OpenJDK . Consultado el 17 de septiembre de 2019 .
  72. "JDK 14" . OpenJDK . Consultado el 25 de marzo de 2020 .
  73. "Lista de funciones obsoletas (Java SE 22)" . cr.openjdk.org . Consultado el 16 de abril de 2024 .
  74. "Eliminar Thread.countStackFrames" . bugs.openjdk.org . Consultado el 16 de abril de 2024 .
  75. "Java SE 22 ( JSR 397)" . cr.openjdk.org . Consultado el 16 de abril de 2024 .
  76. "¿Qué es la tecnología Java y por qué la necesito?" . Archivado del original el 25 de septiembre de 2010. Consultado el 15 de diciembre de 2011. Java se ejecuta en más de 850 millones de ordenadores personales en todo el mundo y en miles de millones de dispositivos en todo el mundo, incluidos dispositivos móviles y televisores.
  77. "Java - Wiki del Proyecto Fedora" . fedoraproject.org .
  78. "Plataforma IntelliJ" .
  79. Tema, Dalibor (27 de enero de 2016). "Transición a una web sin complementos" . Oracle.
  80. "Duke, la mascota de Java" . Oracle . Consultado el 18 de marzo de 2019 .
  81. "duke: Página principal del proyecto" . Sun Microsystems . Archivado del original el 18 de junio de 2007. Consultado el 18 de marzo de 2007 .
  82. "Duke, la mascota de Java" .
  83. "Future Tech Duke (The Java Source)" . Tori Wieldt. Archivado del original el 20 de agosto de 2011. Recuperado el 17 de agosto de 2011 .
  84. Smith, Donald (11 de septiembre de 2018). "Lanzamientos de Oracle JDK para Java 11 y versiones posteriores" .
  85. Stallman, Richard (24 de mayo de 2006). "El curioso incidente del sol a medianoche" . Groklaw . Archivado del original el 5 de mayo de 2010.
  86. Schwartz, Jonathan. "¿?" . Blog de Jonathan Schwartz . Sun Microsystems. Archivado del original el 15 de julio de 2006.
  87. "Oracle OpenWorld: Linux inquebrantable / La versión 5015.2 no está en el horizonte | Blog de Formtek" . Formtek.com. 26 de octubre de 2006. Consultado el 9 de febrero de 2016 .
  88. "Oracle y Sun Microsystems | Adquisiciones estratégicas | Oracle" . Sun.com . Consultado el 9 de febrero de 2016 .
  89. "Libre pero encadenado: la trampa de Java - Proyecto GNU - Fundación del Software Libre" . Gnu.org. 12 de abril de 2004. Consultado el 9 de febrero de 2016 .
  90. "Sun 'lanza' Java al mundo" . BBC News . 13 de noviembre de 2006. Consultado el 6 de mayo de 2010 .
  91. "¡Open JDK ya está aquí!" . Sun Microsystems. 8 de mayo de 2007 . Consultado el 9 de mayo de 2007 .
  92. Wielaard, Mark (30 de mayo de 2007). "Se publicó el código fuente de OpenJDK6 b10" . Recuperado el 12 de julio de 2008 .
  93. "Red Hat Java" .
  94. "Fedora Java" .
  95. "Debian Java" .
  96. "Ubuntu Java" .
  97. Sharples, Rich (19 de junio de 2008). "Java es finalmente libre y de código abierto" . Archivado del original el 20 de junio de 2008.
  98. libgdx (9 de diciembre de 2013). "Empaquetando un jre · libgdx/libgdx Wiki · GitHub" . Github.com . Consultado el 9 de febrero de 2016 .
  99. "Pregunta sobre la inclusión de OpenJDK personalizado" . Java-Gaming.org. Archivado del original el 4 de marzo de 2016. Consultado el 9 de febrero de 2016 .
  100. Cluley, Graham (15 de enero de 2013) .«A menos que sea absolutamente necesario ejecutar Java en navegadores web, desactívelo», dice el equipo CERT patrocinado por el DHS – Naked Security . Nakedsecurity.sophos.com. Archivado del original el 21 de mayo de 2023. Consultado el 9 de febrero de 2016 .
  101. "Genéricos en Java" . Object Computing, Inc. Archivado del original el 2 de enero de 2007. Consultado el 9 de diciembre de 2006 .
  102. "Qué falla en Java: Borrado de tipos" . 6 de diciembre de 2006. Archivado del original el 22 de julio de 2012. Consultado el 9 de diciembre de 2006 .
  103. "Los sistemas de tipos de Java y Scala son defectuosos" (PDF) .
  104. "Las bibliotecas de Java deberían ofrecer soporte para la aritmética de enteros sin signo" . Base de datos de errores, Sun Developer Network . Oracle . Consultado el 18 de enero de 2011 .
  105. Owens, Sean R. (5 de noviembre de 2009). "Java y los tipos de datos unsigned int, unsigned short, unsigned byte, unsigned long, etc. (O mejor dicho, la ausencia de estos)" . darksleep.com . Consultado el 9 de octubre de 2010 .
  106. Kahan, W.; Darcy, Joseph D. (1 de marzo de 1998). "Cómo el punto flotante de Java perjudica a todos en todas partes" (PDF) . Recuperado el 9 de diciembre de 2006 .
  107. "Tipos, valores y variables" . Sun Microsystems . Consultado el 9 de diciembre de 2006 .
  108. "¿Qué lenguajes de programación son los más rápidos?" . Juego de evaluación comparativa de lenguajes informáticos . Archivado del original el 14 de agosto de 2011.
  109. "velocidad ÷ velocidad de C++ GNU g++" . Juego de evaluación comparativa de lenguajes informáticos . Archivado del original el 26 de septiembre de 2011.
  110. "Rendimiento de C++ vs Java: ¡Empate! | Blog de Christian Felde" . Blog.cfelde.com. 27 de junio de 2010. Consultado el 9 de febrero de 2016 .
  111. "Arquitectura de seguridad de Java: Contenido" . Docs.oracle.com. 2 de octubre de 1998. Consultado el 9 de febrero de 2016 .
  112. Horowitz, Michael (31 de agosto de 2012). "Fallo de seguridad en Java: yada yada yada | Computerworld" . Blogs.computerworld.com. Archivado del original el 24 de julio de 2014. Recuperado el 9 de febrero de 2016 .
  113. Brook, Chris. "La primera parada para noticias de seguridad" . Threatpost. Archivado del original el 8 de marzo de 2013. Recuperado el 9 de febrero de 2016 .
  114. "Por qué y cómo deshabilitar Java en su computadora ahora - Tecnología y ciencia - Innovación" . NBC News. 12 de enero de 2013. Archivado del original el 21 de febrero de 2014. Consultado el 9 de febrero de 2016 .
  115. "El Departamento de Seguridad Nacional de EE. UU. insta a los usuarios de computadoras a deshabilitar Java" . Forbes.com . Consultado el 9 de febrero de 2016 .
  116. Brook, Chris. "La primera parada para noticias de seguridad" . Threatpost. Archivado del original el 9 de abril de 2013. Recuperado el 9 de febrero de 2016 .
  117. "Actualizaciones de parches críticos y alertas de seguridad" . Oracle.com . Consultado el 9 de febrero de 2016 .
  118. Finkle, Jim (14 de enero de 2013). "El parche de emergencia para Java no soluciona las vulnerabilidades de ciberdelincuencia, advierten los expertos" . Independent.ie . Consultado el 9 de febrero de 2016 .
  119. Kelly, Meghan (14 de enero de 2013). "Oracle publica una solución para una vulnerabilidad de Java después de que el DHS advirtiera sobre sus fallos" . VentureBeat . Consultado el 9 de febrero de 2016 .
  120. Krebs, Brian (16 de febrero de 2016). "Adiós al complemento Java de Oracle" . KrebsOnSecurity .
  121. Gonsalves, Antone (5 de septiembre de 2012). "Java ya no es necesario. Desconéctalo" . ReadWrite . Wearable World. Archivado del original el 28 de octubre de 2012.
  122. «Java: ¿deberías eliminarlo?» . The Guardian . 8 de febrero de 2013.
  123. Bott, Ed. "Un análisis detallado de cómo Oracle instala software engañoso con actualizaciones de Java" . ZDNet.com . ZDNet . Consultado el 14 de diciembre de 2014 .
  124. "Windows 7 - ¿Cómo actualizo Java desde una cuenta que no es de administrador?" . Super User .
  125. "Actualizar Google Chrome - Ordenador - Ayuda de Google Chrome" . support.google.com .
  126. "Boletín de seguridad de Adobe" . helpx.adobe.com .
  • "Cómo surgió la especificación de la JVM " . infoq.com  Presentación de James Gosling sobre los orígenes de Java, del JVM Languages ​​Summit 2008.
  • Servicios de desarrollo Java ”. sagipl.com. – Información sobre servicios de desarrollo de software Java a medida, aplicaciones web y empresariales.