Java (plataforma de software)

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
TuxGuitar, un programa impulsado por Java

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

Escribir en el lenguaje de programación Java es la forma principal de producir código que se implementará 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, incluidos Ada, JavaScript, Kotlin (el lenguaje Android preferido de Google), Python y Ruby. Además, se han diseñado varios lenguajes para ejecutarse de forma nativa en la JVM, incluidos Clojure, Groovy y Scala. La sintaxis de Java toma mucho de C y C++, pero las características orientadas a objetos se modelan a partir de Smalltalk y Objective-C. 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 las que actualmente son compatibles con Oracle, pueden usar la optimización del análisis de escape para asignar en la pila en su lugar) y todas las variables de los tipos de objetos son referencias. La gestión de la memoria se maneja a través de la recolección automática de basura integrada realizada por la JVM.

Última versión

La última versión es Java 22, lanzada en marzo de 2024, y la última versión con soporte a largo plazo (LTS) es Java 21, lanzada en septiembre de 2023, que es una de las pocas versiones LTS que aún reciben soporte, hasta Java 8 LTS. Como plataforma de código abierto, Java tiene muchos distribuidores, incluidos Amazon, IBM, Azul Systems y AdoptOpenJDK. Las distribuciones incluyen Amazon Corretto, Zulu, AdoptOpenJDK y Liberica. En cuanto a Oracle, distribuye Java 8 y también pone a disposición, por ejemplo, Java 11, ambas versiones LTS que actualmente también reciben soporte. Oracle (y otros) "recomiendan encarecidamente que desinstale versiones anteriores de Java" que Java 8, debido a los graves riesgos que conllevan los problemas de seguridad no resueltos. Dado que Java 9 (así como las versiones 10, 12 a 16 y 18 a 20) ya no reciben soporte, Oracle recomienda a sus usuarios que realicen una "transición inmediata" a una versión compatible. Oracle lanzó la última actualización pública gratuita para uso comercial para la versión anterior de Java 8 LTS en enero de 2019 y seguirá brindando soporte para Java 8 con actualizaciones públicas para uso personal de manera indefinida. El soporte extendido de Oracle para Java 6 finalizó en diciembre de 2018.

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 (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. Las plataformas Java se han implementado para una amplia variedad de hardware y sistemas operativos con el objetivo de permitir que los programas Java se ejecuten de manera 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 código de bytes Java (un lenguaje intermedio para la JVM), se proporciona como parte del Kit de desarrollo Java (JDK). El entorno de ejecución Java (JRE), que complementa a la JVM con un compilador Just-in-Time (JIT), convierte el código de bytes intermedio en código de 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 bytecode intermedio de Java según las reglas establecidas en la especificación de la máquina virtual.

Dominios de aplicaciones

Las diferentes plataformas apuntan a diferentes clases de dispositivos y dominios de aplicaciones:

  • Java Card: Una tecnología que permite que pequeñas aplicaciones basadas en Java (applets) se ejecuten de forma segura en tarjetas inteligentes y dispositivos similares de memoria pequeña.
  • Java ME (Micro Edition): Especifica varios conjuntos diferentes de bibliotecas (conocidos como perfiles) para dispositivos con capacidad limitada de almacenamiento, visualización y potencia. A menudo se utiliza para desarrollar aplicaciones para dispositivos móviles, PDAs, cajas de TV y impresoras.
  • Java SE (Edición estándar): Para uso general en PCs de escritorio, servidores y dispositivos similares.
  • Jakarta EE (Edición de Enterprise): Java SE más varias API que son útiles para aplicaciones de empresa multi-tier cliente-servidor.

Java SE

Java Platform, Standard Edition (Java SE) es una plataforma informática para el desarrollo y despliegue de código portátil para entornos de escritorio y servidor. Java SE era anteriormente conocida como Java 2 Platform, Standard Edition (J2SE).

La plataforma utiliza el lenguaje de programación Java y forma parte de la familia Java software-platform. Java SE define una gama de API de uso general, como API de Java para la Biblioteca de Clases de Java, e incluye también la especificación de lenguaje Java y la especificación de máquinas virtuales de Java. OpenJDK es la implementación oficial de referencia desde la versión 7.

Yakarta EE

Yakarta EE, anteriormente Java Platform, Enterprise Edition (Java EE) y Java 2 Platform, Enterprise Edition (J2EE), es un conjunto de especificaciones, ampliando Java SE con especificaciones para funciones empresariales como computación distribuida y servicios web. Las aplicaciones de Yakarta EE se ejecutan en plazos de referencia, que pueden ser microservicios o servidores de aplicaciones, que manejan transacciones, seguridad, escalabilidad, concurrencia y gestión de los componentes que están implementando.

Java máquina virtual

El corazón 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 sin importar en qué hardware o sistema operativo se esté ejecutando el programa. Sin embargo, las nuevas versiones, como la de Java 10 (y anteriores), han realizado pequeños cambios, lo que significa que el código de bytes en general solo es compatible con versiones posteriores. Hay un compilador JIT (Just In Time) dentro de la Máquina Virtual Java, o JVM. El compilador JIT traduce el código de bytes de Java en 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 en su totalidad o en su mayor parte con JIT, tienden a ejecutarse tan rápido como los programas nativos. 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.

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

Java Development Kit

El Java Development Kit (JDK) es una distribución de la tecnología Java por Oracle Corporation. Implementa la especificación de lenguaje Java (JLS) y la especificación de máquina virtual de Java (JVMS) y proporciona la edición estándar (SE) de la interfaz de programación de aplicaciones Java (API). Es derivado de la comunidad impulsada OpenJDK que administradores de Oracle. Proporciona software para trabajar con aplicaciones Java. Ejemplos de software incluido son la máquina virtual Java, un compilador, herramientas de monitoreo de rendimiento, un depurador y otras utilidades que Oracle considera útil para programadores Java.

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

La implementación primaria de Oracle del JVMS se conoce como el HotSpot (máquina virtual).

Java Runtime Environment

El entorno de ejecución Java (JRE) lanzado por Oracle es una distribución de software disponible de forma gratuita que contiene una JVM independiente (HotSpot), la biblioteca estándar de Java (Java Class Library), una herramienta de configuración y, hasta su discontinuación en JDK 9, un complemento para el navegador. Es el entorno Java más común instalado en computadoras personales en formato portátil y de escritorio. Los teléfonos móviles, incluidos los teléfonos con funciones básicas y los primeros teléfonos inteligentes que se entregan con una JVM, probablemente incluyan una JVM diseñada para ejecutar aplicaciones destinadas a la Micro Edition de la plataforma Java. Mientras tanto, la mayoría de los teléfonos inteligentes, tabletas y otras PC portátiles modernos que ejecutan aplicaciones Java probablemente lo hagan a través del soporte del sistema operativo Android, que incluye una máquina virtual de código abierto incompatible con la especificación JVM. (En cambio, las herramientas de desarrollo de Android de Google toman como entrada los programas Java y como salida el bytecode Dalvik, que es el formato de entrada nativo para la máquina virtual en los dispositivos Android). La última versión de actualización de la ruta crítica de JRE con un acuerdo BCL de Oracle fue la 8u201 y la última versión de actualización del conjunto de parches con la misma licencia fue la 8u202. La última implementación de Oracle JRE, independientemente de su esquema de licencias, fue la 9.0.4. Desde Java Platform SE 9, toda la plataforma también se agrupó en módulos. La modularización de las implementaciones de Java SE permite a los desarrolladores agrupar sus aplicaciones junto 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.

Bibliotecas de clase

En la mayoría de los sistemas operativos (SO) modernos, se proporciona una gran cantidad de código reutilizable para simplificar el trabajo del programador. Este código se proporciona normalmente como un conjunto de bibliotecas cargables dinámicamente que las aplicaciones pueden llamar en tiempo de ejecución. Debido a que la plataforma Java no depende de ningún sistema operativo específico, las aplicaciones no pueden depender de ninguna de las bibliotecas de SO preexistentes. En cambio, 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 pinta la interfaz de usuario y maneja los eventos por sí misma, eliminando muchas diferencias sutiles entre la forma en que las diferentes 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, las bibliotecas de Java proporcionan al programador un conjunto conocido de funciones para realizar tareas comunes, como mantener listas de elementos o realizar análisis complejos de cadenas. En segundo lugar, las bibliotecas de clases proporcionan una interfaz abstracta para tareas que normalmente dependerían en gran medida del hardware y el sistema operativo. Tareas como el acceso a la red y el acceso a archivos suelen estar muy entrelazadas con las implementaciones distintivas de cada plataforma. Las bibliotecas java.net y java.io implementan una capa de abstracción en el código nativo del sistema operativo y luego proporcionan una interfaz estándar para que las aplicaciones Java realicen esas tareas. Por último, cuando alguna plataforma subyacente no admite todas las características que espera una aplicación Java, las bibliotecas de clases funcionan para manejar con elegancia los componentes ausentes, ya sea mediante emulación para proporcionar un sustituto o, al menos, proporcionando una forma consistente de verificar la presencia de una característica específica.

Idiomas

La palabra "Java", por sí sola, suele referirse al lenguaje de programación Java que fue diseñado para su uso con la plataforma Java. Los lenguajes de programación suelen quedar fuera del ámbito de aplicación de la frase "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 para tratar más claramente el lenguaje Java y la máquina virtual Java como entidades separadas, de modo que ya no se los considere una sola unidad.

Terceros han producido muchos compiladores o intérpretes que apuntan a la JVM. Algunos de ellos son para lenguajes existentes, mientras que otros son para extensiones del lenguaje Java. Estos incluyen:

  • BeanShell – un lenguaje de scripts ligero para Java (ver también JShell)
  • Ceylán – un lenguaje de programación orientado a objetos, fuertemente y de tipo estadístico con énfasis en la inmutabilidad (y ya no se mantiene desde 2023)
  • Clojure – un dialecto moderno, dinámico y funcional del lenguaje de programación Lisp en la plataforma Java
  • Gosu – un lenguaje de programación basado en JVM de uso general publicado bajo la Licencia Apache 2.0
  • Groovy – un lenguaje totalmente Java-interoperable, Java-sintax-compatible, estático y dinámico con características de Python, Ruby, Perl y Smalltalk
  • JRuby – un intérprete de Ruby
  • Jython – un intérprete de Python
  • Kotlin – un lenguaje de programación para un JVM (y no JVM, por ejemplo, escritorio e iOS) con interoperabilidad Java completa (el idioma preferido de Google para Android, su JVM, sobre Java, que también es compatible allí y que previamente promovió)
  • Rhino – un intérprete de JavaScript
  • Scala – un lenguaje de programación multiparadigma con sintaxis no compatible con Java diseñado como "mejor Java"

Plataformas similares

El éxito de Java y su concepto de "escribir una vez, ejecutar en cualquier lugar" ha llevado a otros esfuerzos similares, en particular el .NET Framework, que apareció desde 2002 y que incorpora muchos de los aspectos exitosos de Java. .NET se creó desde cero para admitir varios lenguajes de programación, mientras que la plataforma Java se creó inicialmente para admitir solo el lenguaje Java, aunque desde entonces se han creado muchos otros lenguajes para JVM. Al igual que Java, los lenguajes .NET se compilan en código de bytes y son ejecutados por Common Language Runtime (CLR), que tiene un propósito similar al de JVM. Al igual que JVM, CLR proporciona administración de memoria a través de la recolección automática de basura y permite que el código de bytes .NET se ejecute en varios sistemas operativos.

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

Ejecución

La especificación de la JVM otorga mucho margen de maniobra a los implementadores en lo que respecta a los detalles de implementación. Desde Java 1.3, JRE de Oracle contiene una JVM llamada HotSpot. Ha sido diseñada para ser una JVM de alto rendimiento.

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

Jabón generador

El montón de la máquina virtual Java es el área de memoria que utiliza la JVM para la asignación dinámica de memoria.

En HotSpot el montón se divide en generaciones:

  • El joven generación almacena objetos de corta duración que se crean e inmediatamente se recogen basura.
  • Los objetos que persisten se trasladan al vieja generación (también llamado el generación titular). Esta memoria está subdividida en (dos) espacios de supervivencia donde se almacenan los objetos que sobrevivieron a las primeras y próximas colecciones 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. La generación permanente se eliminó de Java 8.

Originalmente no había 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, mover las estructuras de clases a un área específica permitió mejoras significativas en el rendimiento.

Seguridad

El JRE de Java está instalado en una gran cantidad de computadoras. Por lo tanto, los usuarios finales con una versión desactualizada de JRE son vulnerables a muchos ataques conocidos. Esto llevó a la creencia generalizada de que Java es inherentemente inseguro. Desde Java 1.7, el JRE de Oracle para Windows incluye una funcionalidad de actualización automática.

Antes de la interrupción del complemento Java para navegadores, cualquier página web podía ejecutar un subprograma Java, que proporcionaba una superficie de ataque de fácil acceso para sitios web maliciosos. En 2013, Kaspersky Labs informó que el complemento Java era el método preferido por los delincuentes informáticos. Los exploits de Java se incluyen en muchos paquetes de exploits que los piratas informáticos implementan en sitios web pirateados. Los subprogramas Java se eliminaron en Java 11, lanzado el 25 de septiembre de 2018.

Java versiones

Java
versión
Año Cambios
172021Una liberación de soporte a largo plazo (LTS), tiene varias mejoras, proporciona ajuste de patrón para interruptor declaraciones y declaraciones clases selladas
162021Presentada clases récord, patrón de coincidencia, y clases selladas para mejorar la capacidad de modelización de datos
152020Presentada bloques de texto, clases selladas como características de vista previa, potenciando el manejo de cadenas y clases
142020Presentación de nuevas características clases récord y patrón de coincidencia para instancia de como características de vista previa
132019Incluidas mejoras, bloques de texto, reaplicación del legado Socket API
122019Presentada cambiar expresiones, nuevo Shenandoah basura coleccionista
112018Un lanzamiento de LTS, introducido nuevo HTTP Client, eliminar los módulos Java EE y CORBA
102018Presentada Local-Variable Tipo Inferencia (var), permite declarar variables locales sin especificar tipo
92017Presentada Java Platform Módulo (JPMS) para aplicaciones modulares, JShell interactiva Java REPL
82014Mayor liberación, introducida Expresiones de lambda, nuevo Date and Time API para mejorar la productividad
72011Presentada tratar con recursos, Enciende la cuerda, Diamond Operator, incluido el manejo ampliado de excepciones, nueva biblioteca de archivos I/O (NIO.2)
62006Presentada Scripting Language Support (JSR 223), Mejoras del Servicio Web, proporcionado JDBC 4.0 con soporte XML SQL
52004Liberación significativa, incluida Genéricos, un Mejorado para el bucle, Autoboxing/Unboxing, Importación estatica, Varargs, Enumerations, Anotaciones
42002Presentada Expresiones periódicas, Excepciones Cadena, nuevo conjunto de API de I/O llamado NIO (Nueva entrada / salida), nuevo API de registro
32000Incluido nuevo Sun JVM llamado HotSpot, presentado Java Naming y interfaz de directorio (JNDI), Java Platform Debugger Architecture (JPDA)
21998Presentada Marco de las colecciones, Java String mapa de memoria para constantes, a Just In Time (JIT) compilador, y Swing API for GUIs
1.11997Presentada Clases internas, Reflexión, Java Beans, JDBC API para el acceso a bases de datos
1.01996Primera versión del lenguaje de programación Java, introdujo programación orientada al objeto y código de bytecode en Java, que hizo Java cross-platform

Historia

James Gosling

La plataforma y el lenguaje Java comenzaron 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 C++ y C de Sun, así como con la forma en que la organización manejaba el proyecto NeWS. Naughton informó a Scott McNealy sobre su plan de dejar Sun y mudarse a NeXT; McNealy le pidió que fingiera ser Dios y le enviara un correo electrónico explicándole cómo arreglar 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 de Sun y comenzó el Proyecto Stealth.

El proyecto Stealth pasó a llamarse pronto 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 una nueva tecnología para programar electrodomésticos inteligentes de próxima generación, que Sun esperaba que ofrecieran nuevas e importantes oportunidades.

El equipo inicialmente consideró usar C++, pero lo rechazó por varias razones. Debido a que estaban desarrollando un sistema integrado con recursos limitados, decidieron que C++ necesitaba demasiada memoria y que su complejidad conducía a errores de desarrollo. La falta de recolección de basura del lenguaje significaba que los programadores tenían que administrar manualmente la memoria del sistema, una tarea desafiante y propensa a errores. El equipo también se preocupó por la falta de facilidades portables del lenguaje C++ para seguridad, programación distribuida y subprocesamiento. Finalmente, querían una plataforma que pudiera ser fácilmente trasladada a todo tipo de dispositivos.

Bill Joy había imaginado un nuevo lenguaje que combinase Mesa y C. En un artículo titulado Further, propuso a Sun que sus ingenieros produjeran un entorno orientado a objetos basado en C++. Inicialmente, Gosling intentó modificar y ampliar C++ (una propuesta de desarrollo a la que se refirió como "C++ ++ --") pero pronto abandonó esa idea a favor de crear un nuevo lenguaje, al que llamó Oak, en honor al árbol que se alzaba justo fuera de su oficina.

En el verano de 1992, el equipo pudo demostrar partes de la nueva plataforma, incluyendo el sistema operativo Green, 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 de asistente digital personal (PDA) llamado Star7[1] 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 Green se escindió para convertirse en Firstperson, una subsidiaria de propiedad absoluta de Sun Microsystems, y el equipo se trasladó a Palo Alto, California. El equipo de Firstperson tenía interés en construir dispositivos altamente interactivos, y cuando Time Warner emitió una solicitud de propuesta (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 otorgaba demasiado control al usuario, por lo que Firstperson perdió su oferta ante 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 volvió a ser absorbida por Sun.

Java cumple con la Web

John Gage

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

Sun cambió el nombre del lenguaje Oak a Java después de que una búsqueda de marca registrada revelara que Oak Technology utilizaba el nombre Oak. Sun fijó el precio de las licencias de Java por debajo del coste para ganar cuota de mercado. Aunque Java 1.0a se puso a disposición para su descarga en 1994, el primer lanzamiento público de Java, Java 1.0a2 con el navegador HotJava, se produjo 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 Netscape incluirían soporte para Java. El 9 de enero de 1996, Sun Microsystems formó el grupo JavaSoft para desarrollar la tecnología.

Si bien los llamados applets de Java para navegadores web ya no son el uso más popular de Java (por ejemplo, ahora se utilizan más en el lado del servidor) o la forma más popular de ejecutar código en el lado del cliente (JavaScript se hizo más popular), aún es posible ejecutar Java (u otros lenguajes JVM como Kotlin) en navegadores web, incluso después de que se haya eliminado el soporte de JVM, utilizando, por ejemplo, TeaVM.

GNU General Public License

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 GNU (GPL).

Historia de la versión

El lenguaje Java ha sufrido varios cambios desde el lanzamiento de JDK (Java Development Kit) 1.0 el 23 de enero de 1996, así como numerosas incorporaciones de clases y paquetes a la biblioteca estándar. Desde J2SE 1.4, el Proceso de la Comunidad Java (JCP) ha regido la evolución del lenguaje Java. El JCP utiliza Solicitudes de especificación de Java (JSR) para proponer y especificar adiciones y cambios a la plataforma Java. La Especificación del lenguaje Java (JLS) especifica el lenguaje; los cambios a la JLS se gestionan según la JSR 901.

Sun lanzó JDK 1.1 el 19 de febrero de 1997. Entre las principales novedades se encontraban una reestructuración exhaustiva del modelo de eventos de Abstract Window Toolkit (AWT), clases internas añadidas al lenguaje, JavaBeans y Java Database Connectivity (JDBC).

J2SE 1.2 (8 de diciembre de 1998) – Nombre en clave Playground. Esta versión y las posteriores hasta J2SE 5.0 recibieron el nombre de 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). Entre las principales incorporaciones se encontraban la reflexión, un marco de recopilación, 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 y la JVM de Sun se equipó con un compilador JIT por primera vez.

J2SE 1.3 (8 de mayo de 2000) – Nombre en clave Kestrel. Entre los cambios más notables se encuentran la incorporación de HotSpot JVM (HotSpot JVM se lanzó por primera vez en abril de 1999 para J2SE 1.2 JVM), JavaSound, Java Naming and Directory Interface (JNDI) y Java Platform Debugger Architecture (JPDA).

J2SE 1.4 (6 de febrero de 2002) – Nombre en código Merlin. Esta versión se convirtió en la primera versión de la plataforma Java desarrollada bajo el Proceso de la Comunidad Java como JSR 59. Los cambios más importantes 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 lo numeró 1.5, que todavía se usa como número de versión interna. Desarrollado bajo JSR 176, Tiger agregó varias características nuevas e importantes al lenguaje, incluyendo el bucle for-each, genéricos, autoboxing y var-args.

Java SE 6 (11 de diciembre de 2006) – Nombre en clave Mustang. Se incluía con un gestor de bases de datos y facilitaba el uso de lenguajes de programación con la JVM (como JavaScript utilizando el motor Rhino de Mozilla). A partir de esta versión, Sun sustituyó el nombre "J2SE" por Java SE y eliminó el ".0" del número de versión. Otros cambios importantes incluyen compatibilidad con anotaciones conectables (JSR 269), muchas mejoras de la interfaz gráfica de usuario, incluidas mejoras de la interfaz de usuario nativa 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. 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 amplió con soporte para lenguajes dinámicos, mientras que la biblioteca de clases se amplió, entre otras cosas, con un marco de unión/bifurcación, una nueva biblioteca de E/S de archivos mejorada y soporte para nuevos protocolos de red como SCTP. La actualización 76 de Java 7 se publicó en enero de 2015, con fecha de vencimiento el 14 de abril de 2015.

En junio de 2016, después de la última actualización pública de Java 7, se anunciaron errores de seguridad en Java 6, 7 y 8 que podían explotarse de forma remota.

Java SE 8 (18 de marzo de 2014) – Nombre en clave Kenai. Entre los cambios más notables se incluyen la compatibilidad a nivel de lenguaje con expresiones lambda (cierres) y métodos predeterminados, el entorno de ejecución de JavaScript Project Nashorn, una nueva API de fecha y hora inspirada en Joda Time y la eliminación de PermGen. Esta versión no es compatible oficialmente con la plataforma Windows XP, pero se sabe que funciona allí. Por lo tanto, debido al final 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. Se refiere a JDK8, la plataforma de desarrollo para Java que también incluye un entorno de ejecución de Java en pleno funcionamiento. Java 8 es compatible con Windows Server 2008 R2 SP1, Windows Vista SP2 y Windows 7 SP1, Ubuntu 12.04 LTS y versiones superiores (y algunos otros sistemas operativos).

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 ha aumentado a Internet Explorer 11 u otros navegadores web), y Oracle abandonó 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".

Java SE 11 LTS se lanzó en septiembre de 2018, 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 para la plataforma Java bajo la Licencia Pública General GNU, y si bien 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. Las características de Java 11 incluyen dos nuevas implementaciones de recolección de basura, Flight Recorder para depurar problemas profundos y un nuevo cliente HTTP que incluye soporte para WebSocket.

Java SE 12 se lanzó en marzo de 2019.

Java SE 13 se lanzó en septiembre de 2019.

Java SE 14 se lanzó en marzo de 2020.

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, a lo largo de los años se han realizado cambios significativos en la biblioteca de clases de Java, que ha crecido desde unos pocos cientos de clases en JDK 1.0 a más de tres mil en J2SE 5.0. Se han desarrollado API completamente nuevas, como Swing y Java 2D, y muchas de las clases y métodos originales de JDK 1.0 han quedado obsoletos (algunos de ellos "terminalmente obsoletos"), por ejemplo, en relación con la finalización.

Se ha eliminado de Java 22 al menos una API que rara vez se utiliza (para subprocesos).

Usage

Uso de escritorio

Un programa Java que se ejecuta en un escritorio de Windows Vista (apodado por Java 8, pero no oficialmente por versiones posteriores, como Java 11)

Actualmente, Java 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). Oracle no admite otros sistemas (para compilación, pero es posible que IBM, SAP, etc.) aunque se sabe que funcionan, por ejemplo, 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 compila sin opciones que no sean las predeterminadas).

Según Oracle, en 2010, el entorno de ejecución de Java se encontraba en más de 850 millones de PC. Microsoft no ha incluido un entorno de ejecución de Java (JRE) en sus sistemas operativos desde que Sun Microsystems demandó a Microsoft por añadir 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 a partir de 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 Oracle JRE propietario.

Algunas aplicaciones Java se utilizan bastante ampliamente en los escritorios, incluidos los entornos de desarrollo integrados NetBeans y Eclipse, y los clientes de uso compartido de archivos como LimeWire y Vuze. Java también se utiliza en el entorno de programación matemática MATLAB, tanto para representar 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 que se puede instalar por separado desde el entorno de ejecución de Java en JDK 9 y luego eliminarlo por completo de una versión futura, lo que obligará a los desarrolladores web a usar una tecnología alternativa.

Mascotas

Plain ol Duke

Duke es la mascota de Java.

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

Licencias

El código fuente de las implementaciones de Java de Sun (es decir, la implementación de referencia de facto) ha estado disponible durante algún tiempo, pero hasta hace poco, 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 Iniciativa de Código Abierto ni de la Free Software Foundation para ser considerados software libre o de código abierto, y por lo tanto, Sun Java era una plataforma propietaria.

Si bien varios proyectos de terceros (por ejemplo, GNU Classpath y Apache Harmony) crearon implementaciones parciales de Java en software libre, el gran tamaño de las bibliotecas de Sun combinado con el uso de métodos de sala limpia significó que sus implementaciones de las bibliotecas de Java (el compilador y la máquina virtual son comparativamente pequeños y están bien definidos) eran incompletas y no totalmente compatibles. Estas implementaciones también tendían a estar mucho menos optimizadas que las de Sun.

Software libre

Jonathan I. Schwartz

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

Sun lanzó la máquina virtual Java HotSpot y el compilador como software libre bajo la Licencia Pública General 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 en marzo de 2007 ("excepto unos pocos componentes que Sun no tiene derecho a publicar en forma de código fuente distribuible bajo la GPL"). Según Richard Stallman, esto significaría el fin de la "trampa de Java". Mark Shuttleworth calificó el anuncio de prensa inicial como "un verdadero hito para la comunidad del software libre".

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

El objetivo de Sun era reemplazar las partes que siguen siendo propietarias y de código cerrado con implementaciones alternativas y hacer que la biblioteca de clases sea completamente libre y de código abierto. Mientras tanto, un proyecto de terceros llamado IcedTea creó un JDK completamente libre y muy utilizable al reemplazar el código sobrecargado con fragmentos o código de GNU Classpath. Sin embargo, OpenJDK se ha vuelto desde entonces compilable sin las partes sobrecargadas (a partir de OpenJDK 6 b10) y se ha convertido en el entorno de ejecución predeterminado para la mayoría de las distribuciones de Linux.

En junio de 2008, se anunció que IcedTea6 (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 que era una implementación de Java 6 totalmente compatible.

Dado que OpenJDK está bajo licencia GPL, es posible redistribuir una versión personalizada de JRE directamente con aplicaciones de software, 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, no es necesario el soporte de Java en los navegadores web, y los expertos en seguridad recomiendan que no se ejecute en un navegador a menos que sea absolutamente necesario. Se sugirió que, si algunos sitios web requieren Java, los usuarios deberían tener una instalación de navegador independiente específicamente para esos sitios.

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 en desuso), por lo que se optó por implementar los genéricos mediante el borrado para permitir la compatibilidad de migración y la reutilización de estas clases existentes. Esto limitó las características que se podían proporcionar con esta incorporación en comparación con otros lenguajes. La adición de comodines de tipo hizo que Java fuera poco sólido.

Tipos de enteros no asignados

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 de procesamiento numérico, incluida la criptografía, lo que puede hacer que Java sea menos conveniente para estas tareas. Aunque es posible evitar parcialmente este problema con el código de conversión y el uso de tipos de datos más grandes, hace que el uso de Java sea engorroso para manejar los datos sin signo. Si bien un entero con signo de 32 bits se puede utilizar 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 utilizando ningún tipo de entero en Java porque no existe ningún tipo mayor de 64 bits en el lenguaje Java. Si se abstraen mediante funciones, las llamadas a funciones se vuelven necesarias para muchas operaciones que son nativas de algunos otros lenguajes. Como alternativa, es posible utilizar los números enteros con signo de Java para emular números enteros sin signo del mismo tamaño, pero esto requiere un conocimiento detallado de operaciones complejas bit a bit.

Aritmética de punto flotante

Si bien la aritmética de punto flotante de Java se basa en gran medida en el estándar IEEE 754 (estándar para aritmética de punto flotante binario), ciertas funciones no son compatibles incluso cuando se utiliza el modificador strictfp, como los indicadores de excepción y los redondeos dirigidos, capacidades exigidas por el estándar IEEE 754. Además, los tipos de punto flotante de precisión extendida permitidos en 754 y presentes en muchos procesadores no están permitidos en Java.

Ejecución

En los primeros días de Java (antes de que se implementara HotSpot VM en Java 1.3 en 2000) hubo algunas críticas sobre el rendimiento. Los benchmarks generalmente indicaban que Java era aproximadamente un 50% más lento que C (un lenguaje que se compila en código nativo).

El rendimiento de Java ha mejorado sustancialmente desde las primeras versiones. En algunas pruebas optimizadas, se ha demostrado que el rendimiento de los compiladores JIT es bastante similar al de los compiladores nativos.

El bytecode de Java puede ser interpretado en tiempo de ejecución por una máquina virtual, o puede ser compilado en tiempo de carga o tiempo de ejecución en código nativo que se ejecuta directamente en el hardware de la computadora. La interpretación es más lenta que la ejecución nativa, y la compilación en tiempo de carga o tiempo de ejecución tiene una penalización de rendimiento inicial para la compilación. Las implementaciones de JVM modernas de alto rendimiento utilizan el enfoque de compilación, por lo que después del tiempo de arranque inicial el rendimiento es equivalente al del código nativo.

Seguridad

La plataforma Java ofrece una arquitectura de seguridad diseñada para permitir que el usuario ejecute código de bytes no confiable en un entorno protegido contra software malicioso o mal escrito. Esta función de "entorno protegido" tiene como objetivo proteger al usuario al restringir el acceso a ciertas funciones 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 numerosos fallos de seguridad en algunas implementaciones de Java ampliamente utilizadas, incluida la de Oracle, que permiten que un código no confiable eluda el mecanismo de sandbox, exponiendo a los usuarios a ataques maliciosos. Estos fallos afectan únicamente a las aplicaciones Java que ejecutan bytecode 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 y tiene control total sobre todo el código que se está ejecutando no se ven afectadas.

El 31 de agosto de 2012, se descubrió que Java 6 y 7 (ambos con soporte en ese entonces) en Microsoft Windows, OS X y Linux tenían una falla de seguridad grave que permitía que se ejecutara un ataque remoto con solo cargar una página web maliciosa. Más tarde se descubrió que Java 5 también tenía fallas.

El 10 de enero de 2013, tres especialistas en informática se manifestaron en contra de Java, diciendo a Reuters que no era seguro y que la gente debería desactivar Java. Jaime Blasco, director de laboratorios de AlienVault Labs, afirmó que "Java es un desastre. No es seguro. Hay que desactivarlo". Esta vulnerabilidad afecta a Java 7 y no está claro si afecta a Java 6, por lo que se sugiere que los consumidores lo desactiven. Las alertas de seguridad de Oracle anuncian los calendarios de parches críticos relacionados con la seguridad de Java.

El 14 de enero de 2013, los expertos en seguridad dijeron que la actualización seguía sin proteger a los equipos de los ataques. Este agujero de explotación provocó una respuesta del Departamento de Seguridad Nacional de los Estados Unidos, en la que se alentaba a los usuarios a desactivar o desinstalar Java. Apple incluyó Java en la lista negra de forma limitada para todos los equipos que ejecutaban su sistema operativo OS X a través de un programa de protección antivirus.

En 2014, y en respuesta a los problemas de seguridad y vulnerabilidad de Java que surgieron recientemente, el blogger de seguridad Brian Krebs pidió a los usuarios que eliminaran al menos el complemento de Java para el navegador y también todo el software. "Espero que el mundo viva sin el complemento de Java (y no tener que recordarles a los lectores las actualizaciones trimestrales de parches), pero probablemente pasarán años antes de que las distintas versiones de este complemento se eliminen de los sistemas de los usuarios finales en todo el mundo". "Aunque antes era prometedor, ha dejado de ser útil en el navegador y se ha convertido en una pesadilla que deleita a los cibercriminales a expensas de los usuarios de computadoras". "Creo que todos deberían desinstalar Java de todos sus PC y Mac, y luego pensar detenidamente si necesitan volver a agregarlo. Si usted es un usuario doméstico típico, probablemente pueda prescindir de él. Si es un usuario comercial, es posible que no tenga otra opción".

Adware

El entorno de ejecución Java distribuido por Oracle tiene un historial de incluir software patrocinado que se instala de forma predeterminada durante la instalación y durante las actualizaciones que se implementan aproximadamente cada mes. Esto incluye la "barra de herramientas Ask.com" que redirigirá las búsquedas del navegador a anuncios y "McAfee Security Scan Plus". Estas ofertas se pueden bloquear mediante una configuración en el Panel de control de Java, aunque esto no es obvio. Esta configuración se encuentra en la pestaña "Avanzado" del Panel de control de Java, bajo el encabezado "Varios", donde la opción está etiquetada como una opción para suprimir las "ofertas de patrocinadores".

Sistema de actualización

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

Véase también

  • Lista de API de Java
  • Marco de registro de Java
  • Java performance
  • JavaFX
  • Jazelle
  • Java ConcurrentMap
  • Comparación de Java y. Plataformas NET
  • Lista de idiomas JVM
  • Lista de mascotas informáticas

Referencias

  1. ^ "JavaSoft barcos Java 1.0" (Press release). Archivado desde el original el 5 de febrero de 2008. Retrieved 9 de febrero 2016.
  2. ^ Ortiz, C. Enrique; Giguère, Éric (2001). Perfil de dispositivo de información móvil para Java 2 Micro Edition: Guía de desarrolladores (PDF). John Wiley & Sons. ISBN 978-0471034650. Retrieved 30 de mayo, 2012.
  3. ^ "JDK Releases". Oracle Corporation. Retrieved 9 de diciembre 2022.
  4. ^ "JDK Releases". Oracle Corporation. Retrieved 17 de enero, 2024.
  5. ^ "HotSpot Group". Openjdk.java.net. Retrieved 9 de febrero 2016.
  6. ^ a b "Oracle JDK 8 y JRE 8 Certified System Configurations Contents". Oracle.com. 8 de abril de 2014. Retrieved 9 de febrero 2016.
  7. ^ "Java SE 7 Locales apoyados". Oracle.com. Retrieved 9 de febrero 2016.
  8. ^ "OpenJDK: GPLv2 + Excepción de Círculos". Openjdk.java.net. 1o de abril de 1989. Retrieved 9 de febrero 2016.
  9. ^ "BCL For Java SE". Oracle.com. 2 de abril de 2013. Retrieved 9 de febrero 2016.
  10. ^ Naughton, Patrick. "Java fue fuertemente influenciada por Objetivo-C". Escuela Virtual. Archivado desde el original el 13 de agosto de 2012.
  11. ^ "¿Por qué debo desinstalar versiones antiguas de Java de mi sistema?". www.java.com. Archivado desde el original el 12 de febrero de 2018. Retrieved 6 de febrero 2018.
  12. ^ "¿Por qué debo desinstalar versiones antiguas de Java de mi sistema?". Oracle. Retrieved 9 de septiembre 2016.
  13. ^ a b "Oracle Critical Patch Update - julio 2016". www.oracle.com.
  14. ^ a b Whittaker, Zack (11 de enero de 2013). "La Seguridad Nacional advierte deshabilitar Java en medio de fallas de cero días". ZDNet. Retrieved 9 de febrero 2016.
  15. ^ Alexander, Christopher. "Java SE 6 Advanced". www.oracle.com. Retrieved 20 de mayo, 2018.
  16. ^ "Java SE Overview". Oracle Corporation. Retrieved 26 de febrero, 2017.
  17. ^ "Java SE 6 Release Contents". Oracle Corporation y/o sus afiliados. Retrieved 1 de enero 2013.
  18. ^ Moving to OpenJDK as the official Java SE 7 Reference Implementation
  19. ^ Java Platform, Standard Edition 7 Reference Implementations
  20. ^ "Java Platform, Standard Edition 8 Reference Implementations". Archivado desde el original el 21 de noviembre de 2015.
  21. ^ "Diferencias entre Java EE y Java SE - Tu primera copa: una introducción a la plataforma EE de Java". Docs.oracle.com. 1 de abril de 2012. Retrieved 18 de julio, 2012.
  22. ^ "Java EE Overview". Oracle Corporation. Retrieved 26 de febrero, 2017.
  23. ^ a b c Lewis, J. P.; Neumann, Ulrich. "Performance of Java versus C++". Graphics and Immersive Technology Lab, University of Southern California.
  24. ^ a b "El Más rápido de Java que C++ Benchmark". Kano.net. 14 de noviembre de 2003. Retrieved 9 de febrero 2016.
  25. ^ a b FreeTTS – Un estudio de caso de rendimiento archivado 2009-03-25 en la máquina Wayback, Willie Walker, Paul Lamere, Philip Kwok
  26. ^ "OpenJDK FAQ". OpenJDK. Retrieved 23 de octubre, 2021.
  27. ^ "BCL para Java SE". Archivado desde el original el 14 de agosto de 2022. Retrieved 14 de agosto 2022.
  28. ^ "Java CPU y PSU Releases Explained". Archivado desde el original el 3 de noviembre de 2014.
  29. ^ "Copia fija". Archivado desde el original el 14 de agosto de 2022. Retrieved 14 de agosto 2022.{{cite web}}: CS1 maint: copia archivada como título (link)
  30. ^ "Copia fija". Archivado desde el original el 10 de agosto de 2022. Retrieved 14 de agosto 2022.{{cite web}}: CS1 maint: copia archivada como título (link)
  31. ^ "Understanding Java 9 Modules". Archivado desde el original el 14 de agosto de 2022. Retrieved 14 de agosto 2022.
  32. ^ "Java Modules".
  33. ^ "Java 9 Estructural Cambios en el JDK y JRE". 30 de octubre de 2017.
  34. ^ "IBM Developer".
  35. ^ "Una Guía para Java 9 Modularidad ANTE Baeldung". 18 de abril de 2018.
  36. ^ "Capítulo 1. Introducción". docs.oracle.com.
  37. ^ www.beanshell.org
  38. ^ "Preguntas frecuentes sobre la colección de basura en la máquina virtual de Hotspot Java". Sun Microsystems. 6 de febrero de 2003. Retrieved 7 de febrero 2009.
  39. ^ a b Masamitsu, Jon (28 de noviembre de 2006). "Presentando la Generación Permanente". Archivado desde el original el 25 de agosto de 2016. Retrieved 7 de febrero 2009.
  40. ^ Nutter, Charles (11 de septiembre de 2008). "Un primer sabor de InvokeDynamic". Retrieved 7 de febrero 2009.
  41. ^ "JEP 122: Quitar la Generación Permanente". Oracle Corporation. 4 de diciembre de 2012. Retrieved 23 de marzo, 2014.
  42. ^ "¿Qué es Java, es inseguro, y debo usarlo?". Lifehacker.com. 14 de enero de 2013. Retrieved 26 de junio 2015.
  43. ^ "¿Hay alguna protección contra las explotaciones Java? prehensi Kaspersky Lab". Kaspersky.com. 9 de septiembre de 2013. Archivado desde el original el 4 de abril de 2015. Retrieved 26 de junio 2015.
  44. ^ Southwick, Karen (1999). High Noon: la historia interior de Scott McNealy y el ascenso de Sun Microsystems. Nueva York [u.a.]: Wiley. pp. 120–122. ISBN 0471297135.
  45. ^ a b Byous, Jon (abril de 2003). "Tecnología Java: Los años tempranos". Sun Microsystems. Archivado desde el original el 30 de mayo de 2008. Retrieved 2 de agosto 2009.
  46. ^ Southwick, Karen (1999). High Noon: la historia interior de Scott McNealy y el ascenso de Sun Microsystems. Nueva York [u.a.]: Wiley. p. 124. ISBN 0471297135.
  47. ^ Walrath, Kathy (21 de diciembre de 2001). "Foreword". Microsistemas solares. Retrieved 2 de agosto 2009.
  48. ^ Murphy, Kieron (4 de octubre de 1996). "¿Por qué decidieron llamarlo Java?". JavaWorld. Retrieved 2020-07-15. ' Los abogados nos habían dicho que no podíamos usar el nombre "OAK" porque [ya estaba marcado por] Oak Technologies", dijo Frank Yellin, ingeniero senior de Sun. Así que se celebró una sesión de reflexión para inventar ideas para un nuevo nombre. '
  49. ^ Banco, David (1 de diciembre de 1995). "El Java Saga". Wired. Retrieved 4 de octubre, 2022. ' Está bajo nuestro costo", dice Schmidt. "Esto pierde dinero en el negocio de licencias para el futuro previsible. Es una inversión estratégica en cuota de mercado. '
  50. ^ "Sun Microsystems anuncia la formación de JavaSoft" (Press release). Sun Microsystems. 9 de enero de 1996. Archivado desde el original el 04/10/2008.
  51. ^ "Sun Opens Java". Sun Microsystems. 13 de noviembre de 2006. Archivado desde el original el 13 de mayo de 2008.
  52. ^ O'Hair, Kelly (diciembre de 2010). "OpenJDK7 and OpenJDK6 Binary Plugs Logic Removed". Oracle Corporation. Retrieved 25 de noviembre, 2011.
  53. ^ "The Java Community Process(SM) Program - JSRs: Java Specification Solicita - detail JSR# 63". Jcp.org. Retrieved 9 de febrero 2016.
  54. ^ "The Java Community Process(SM) Program - JSRs: Java Specification Solicita - detail JSR# 59". Jcp.org. Retrieved 9 de febrero 2016.
  55. ^ "Versión 1.5.0 o 5.0?". Java.sun.com. Retrieved 9 de febrero 2016.
  56. ^ "The Java Community Process(SM) Program - JSRs: Java Specification Solicita - detail JSR# 176". Jcp.org. Retrieved 9 de febrero 2016.
  57. ^ "Java Naming". Java.com. Oracle. Retrieved 25 de agosto, 2011.
  58. ^ "The Java Community Process(SM) Program - JSRs: Java Specification Solicita - detail JSR# 336". Jcp.org. Retrieved 9 de febrero 2016.
  59. ^ Lea, Doug (13 de septiembre de 2004). "JSRs: Java Specification Solicitudes: JSR 166: Utilidades de consentimiento". Java Community Process. Oracle Corp.
  60. ^ "JavaTM SE Development Kit 7 Update 76 Release Notes".. Retrieved 9 de febrero 2016.
  61. ^ "Java 7 and Java 8 Releases by Date". www.java.com.
  62. ^ "Windows XP y Java". Java.com. Abril 8, 2014. Retrieved 9 de febrero 2016.
  63. ^ "java - instalar JDK8 en Windows XP - advapi32.dll error". Reflujo de basura.
  64. ^ "Oracle JDK 8 y JRE 8 Certified System Configurations". www.oracle.com.
  65. ^ "Oracle JDK 10 Certified System Configurations". www.oracle.com. Retrieved 27 de marzo, 2018. Sólo X.org Modo apoyado. El modo Wayland no es compatible.
  66. ^ "Oracle Java SE Support Roadmap". Oracle Corporation. 25 de septiembre de 2018. Retrieved 25 de septiembre, 2018.
  67. ^ "JDK 11". Oracle Corporation. 25 de septiembre de 2018. Retrieved 26 de septiembre, 2018.
  68. ^ "JDK 12". OpenJDK. Retrieved 22 de marzo, 2019.
  69. ^ "JDK 13". OpenJDK. Retrieved 17 de septiembre, 2019.
  70. ^ "JDK 14". OpenJDK. Retrieved 25 de marzo, 2020.
  71. ^ "Lista deprecatada (Java SE 22)". cr.openjdk.org. Retrieved 16 de abril, 2024.
  72. ^ "Remove Thread.countStackFrames". bugs.openjdk.org. Retrieved 16 de abril, 2024.
  73. ^ "Java SE 22 (JSR 397)". cr.openjdk.org. Retrieved 16 de abril, 2024.
  74. ^ "¿Qué es la tecnología Java y por qué lo necesito?". Archivado desde el original el 25 de septiembre de 2010. Retrieved 15 de diciembre, 2011. Java funciona en más de 850 millones de computadoras personales en todo el mundo, y en miles de millones de dispositivos en todo el mundo, incluyendo dispositivos móviles y de televisión.
  75. ^ "Java - Fedora Project Wiki". fedoraproject.org.
  76. ^ Tema, Dalibor (27 de enero de 2016). "Moving to a plugin-free web". Oracle.
  77. ^ "Duke, el Mascota Java". Oracle. Retrieved 18 de marzo, 2019.
  78. ^ "duke: Project Home Page". Sun Microsystems. Archivado desde el original el 18 de junio de 2007. Retrieved 18 de marzo, 2007.
  79. ^ "Duke, el Mascota Java".
  80. ^ "Future Tech Duke (The Java Source)". Tori Wieldt. Archivado desde el original el 20 de agosto de 2011. Retrieved 17 de agosto, 2011.
  81. ^ Smith, Donald (11 de septiembre de 2018). "Oracle JDK Releases for Java 11 and Later".
  82. ^ Stallman, Richard (24 de mayo de 2006). "El Incidente Curioso del Sol en la Noche". Groklaw.
  83. ^ Schwartz, Jonathan. Blog de Jonathan Schwartz. Sun Microsystems. Archivado desde el original el 15 de julio de 2006.
  84. ^ "Oracle OpenWorld: UnBreakable Linux / 5015.2 no en el horizonte tención Formtek Blog". Formtek.com. 26 de octubre de 2006. Retrieved 9 de febrero 2016.
  85. ^ "Oracle and Sun Microsystems ← Adquisiciones Estratégicas ← Oracle". Sun.com. Retrieved 9 de febrero 2016.
  86. ^ "Free but Shackled – The Java Trap – GNU Project – Free Software Foundation". Gnu.org. 12 de abril de 2004. Retrieved 9 de febrero 2016.
  87. ^ "Sun 'releases' Java al Mundo". BBC Noticias. 13 de noviembre de 2006. Retrieved 6 de mayo 2010.
  88. ^ "¡Open JDK está aquí!". Sun Microsystems. 8 de mayo de 2007. Retrieved 9 de mayo 2007.
  89. ^ Wielaard, Mark (30 de mayo de 2007). "OpenJDK6 b10 source posted". Retrieved 12 de julio, 2008.
  90. ^ "Redhat Java".
  91. ^ "Fedora Java".
  92. ^ "Debian Java".
  93. ^ "Ubuntu Java".
  94. ^ Sharples, Rich (19 de junio de 2008). "Java es finalmente libre y abierto". Archivado desde el original el 20 de junio de 2008.
  95. ^ libgdx (9 de diciembre de 2013). "Bundling a jre · libgdx/libgdx Wiki · GitHub". Github.com. Retrieved 9 de febrero 2016.
  96. ^ "Pregunta sobre la abundante costumbre OpenJDK". Java-Gaming.org. Archivado desde el original el 4 de marzo de 2016. Retrieved 9 de febrero 2016.
  97. ^ Cluley, Graham (15 de enero de 2013). "A menos que sea absolutamente necesario ejecutar Java en los navegadores web, deshabilitarlo", dice el equipo de CERT patrocinado por DHS – Seguridad Desnuda". Desnudez.sophos.com. Retrieved 9 de febrero 2016.
  98. ^ "Generics in Java". Object Computing, Inc. Archivado desde el original el 2 de enero de 2007. Retrieved 9 de diciembre 2006.
  99. ^ "Lo que está mal con Java: Erasure tipo". 6 de diciembre de 2006. Archivado desde el original el 22 de julio de 2012. Retrieved 9 de diciembre 2006.
  100. ^ "Java and Scala's Type Systems are Unsound" (PDF).
  101. ^ "Las bibliotecas de Java deben proporcionar apoyo a la aritmética no firmada". Bug Database, Sun Developer Red. Oracle. Retrieved 18 de enero, 2011.
  102. ^ Owens, Sean R. (5 de noviembre de 2009). "Java e int sin firmar, corto sin firmar, byte sin firmar, largo sin firmar, etc. (O más bien, la falta de ella)". darksleep.com. Retrieved 9 de octubre 2010.
  103. ^ Kahan, W.; Darcy, Joseph D. (1 de marzo de 1998). "Cómo va la pintura flotante de Java a todos en todas partes" (PDF). Retrieved 9 de diciembre 2006.
  104. ^ "Tipos, valores y variables". Microsistemas solares. Retrieved 9 de diciembre 2006.
  105. ^ "¿Qué idiomas de programación son más rápidos?". Valores de lenguaje de computadora Juego. Archivado desde el original el 14 de agosto de 2011.
  106. ^ "velocidad C++ GNU g++". Valores de lenguaje de computadora Juego. Archivado desde el original el 26 de septiembre de 2011.
  107. ^ "C++ vs Java performance; ¡Es una corbata! Blog de Christian Felde. Blog.cfelde.com. 27 de junio de 2010. Retrieved 9 de febrero 2016.
  108. ^ "Java Security Architecture: Contents". Docs.oracle.com. 2 de octubre de 1998. Retrieved 9 de febrero 2016.
  109. ^ Horowitz, Michael (31 de agosto de 2012). "Java security flaw: yada yada yada tención Computerworld". Blogs.computerworld.com. Archivado desde el original el 24 de julio de 2014. Retrieved 9 de febrero 2016.
  110. ^ Brook, Chris. "La primera parada para noticias de seguridad". Un puesto de amenaza. Archivado desde el original el 8 de marzo de 2013. Retrieved 9 de febrero 2016.
  111. ^ "Por qué y cómo deshabilitar Java en su computadora ahora - Tecnología " ciencia - innovación". NBC News. 12 de enero de 2013. Archivado desde el original el 21 de febrero de 2014. Retrieved 9 de febrero 2016.
  112. ^ "US Department of Homeland Security Calls On Computer Users to Disable Java". Forbes.com. Retrieved 9 de febrero 2016.
  113. ^ Brook, Chris. "La primera parada para noticias de seguridad". Un puesto de amenaza. Archivado desde el original el 9 de abril de 2013. Retrieved 9 de febrero 2016.
  114. ^ "Critical Patch Updates and Security Alerts". Oracle.com. Retrieved 9 de febrero 2016.
  115. ^ Finkle, Jim (14 de enero de 2013). "Emergency patch for Java fails to fix cibercrime holes, warn experts". Independent.ie. Retrieved 9 de febrero 2016.
  116. ^ Kelly, Meghan (14 de enero de 2013). "Los problemas de Oracle se fijan para la explotación Java después de que DHS advierte de sus agujeros". Venture Beat. Retrieved 9 de febrero 2016.
  117. ^ Krebs, Brian (16 de febrero de 2016). "Good Riddance to Oracle Java Plugin". KrebsOnSecurity.
  118. ^ Gonsalves, Antone (5 de septiembre de 2012). "Java no necesita más. Tira el plug-in". ReadWrite. Mundo adorable.
  119. ^ "Java: ¿Deberías quitarlo?". The Guardian. Febrero 8, 2013.
  120. ^ Bott, Ed. "Un vistazo a cómo Oracle instala software engañoso con actualizaciones Java". ZDNet.com. ZDNet. Retrieved 14 de diciembre 2014.
  121. ^ "ventanas" 7 - ¿Cómo actualizo Java de una cuenta no-admin?". Super User.
  122. ^ "Actualizar Google Chrome - Computadora - Google Chrome Ayuda". support.google.com.
  123. ^ "Adobe Security Bulletin". helpx.adobe.com.
Escucha este artículo ()42 minutos)
Spoken Wikipedia icon
Este archivo de audio fue creado a partir de una revisión de este artículo de fecha 19 de agosto de 2013 ()2013-08-19), y no refleja ediciones posteriores.
  • "Cómo llegó a ser la especie JVM". infoq.com. – Presentación de James Gosling sobre los orígenes de Java, desde la Cumbre de Lenguas JVM 2008
  • Java forums organization
  • Java Introduction, May 14, 2014, Java77 Blog
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save