NOTA: Esta pregunta es de 2014. A partir de Java 11, OpenJDK y Oracle JDK están convergiendo.
¿Hay alguna diferencia crucial entre Oracle y OpenJDK?
Por ejemplo, ¿son iguales la recolección de basura y otros parámetros de JVM?
¿GC funciona de manera diferente entre los dos?
java
difference
usuario1340582
fuente
fuente
Respuestas:
OpenJDK y Oracle JDK son creados y mantenidos actualmente solo por Oracle.
OpenJDK y Oracle JDK son implementaciones de la misma especificación de Java aprobada por el TCK (Java Technology Certification Kit).
La mayoría de los proveedores de JDK se escriben sobre OpenJDK haciendo algunos ajustes para [principalmente reemplazar piezas patentadas con licencia / reemplazar con más elementos de alto rendimiento que solo funcionan en componentes específicos del sistema operativo] sin romper la compatibilidad TCK.
Muchos proveedores implementaron la especificación Java y aprobaron TCK. Por ejemplo, IBM J9, Azul Zulu, Azul Zing y Oracle JDK.
Casi todos los JDK existentes se derivan de OpenJDK.
Como lo sugieren muchos, las licencias son un cambio entre los JDK.
Comenzando con JDK 11 accediendo al soporte de largo tiempo Oracle JDK / Java SE ahora requerirá una licencia comercial. Ahora debe prestar atención a qué JDK está instalando, ya que Oracle JDK sin suscripción podría dejar de funcionar. fuente
Ref: Lista de máquinas virtuales Java
fuente
Para Java 7 , nada crucial. El proyecto OpenJDK se basa principalmente en el código fuente de HotSpot donado por Sun.
Además, OpenJDK fue seleccionado para ser la implementación de referencia para Java 7 y es mantenido por los ingenieros de Oracle.
Hay una respuesta más detallada de 2012 sobre la diferencia entre JVM, JDK, JRE y OpenJDK , que enlaza con una publicación de blog de Oracle :
fuente
Una diferencia clave en el futuro es el cronograma de lanzamiento y la política de soporte.
OpenJDK
OpenJDK tendrá una versión de características cada 6 meses que solo es compatible hasta la próxima versión de características. Es esencialmente un flujo continuo de lanzamientos dirigidos a desarrolladores.
Oracle JDK
Oracle JDK está más dirigido a un público empresarial que valora la estabilidad. Se basa en una de las versiones de OpenJDK, pero luego recibe soporte a largo plazo (LTS). Oracle JDK tiene lanzamientos planeados cada 3 años.
Fuente: https://www.oracle.com/java/java9-screencasts.html?bcid=5582439790001&playerType=single-social&size=events
fuente
Para Java 8 , Oracle JDK vs. OpenJDK mi opinión sobre las diferencias clave:
OpenJDK es una implementación de código abierto de la plataforma Java Standard Edition con la contribución de Oracle y la comunidad Java abierta.
OpenJDK se lanza bajo licencia GPL v2 en donde Oracle JDK está licenciado bajo el Acuerdo de Licencia de Código Binario de Oracle.
En realidad, el proceso de compilación de Oracle JDK se construye a partir del código fuente de OpenJDK. Por lo tanto, no existe una diferencia técnica importante entre Oracle JDK y OpenJDK. Además del código base, Oracle JDK incluye la implementación de Java de Java Plugin y Java WebStart. También incluye componentes de código abierto y de código abierto de terceros, como el rasterizador de gráficos y Rhino, respectivamente. OpenJDK Font Renderer y Oracle JDK Flight Recorder son las principales diferencias notables entre Oracle JDK y OpenJDK.
Para obtener una lista completa de las diferencias, consulte el artículo fuente: Oracle JDK vs OpenJDK y Java JDK Development Process
fuente
Las JVM de Oracle y OpenJDK son iguales y tienen las mismas características de GC (a partir de las últimas versiones 10+). Antes de que Oracle administrara la JVM de OpenJDK, había diferencias concretas que hacían que la antigua JVM de Openjdk fuera casi inutilizable en muchos entornos. Las JVM ahora son iguales.
Los JDK que incluyen el JVM como parte del Kit, difieren según el cronograma de licencia, lanzamiento y mantenimiento, y las bibliotecas de software incluidas en el JDK. Las diferencias cruciales para mí también significan cosas que harían que el código no se ejecute si no está presente. No solo licencias.
Crucialmente, faltan los siguientes archivos, además de un montón de otros en el JDK de Linux (Entonces, si 'afirmó' que el código no funcionó en OpenJDK y lo hizo en OracleJDK mientras usaba javafx, estaba en lo correcto):
fuente
diff
?Según el blog de Oracle , Oracle JDK lanza para Java 11 y posterior
A partir de Java 11, Oracle proporcionará versiones JDK bajo la Licencia pública general GNU v2 de código abierto , con la excepción Classpath (GPLv2 + CPE) , y bajo una licencia comercial para aquellos que usan Oracle JDK como parte de un producto o servicio Oracle, o quienes no desean utilizar software de código abierto. Esta combinación de usar una licencia de código abierto y una licencia comercial reemplaza el histórico " BCL ", que tenía una combinación de términos comerciales gratuitos y pagos.
Se proporcionarán diferentes compilaciones para cada licencia, pero estas compilaciones son funcionalmente idénticas aparte de algunas diferencias cosméticas y de empaque, que se describen en detalle a continuación.
De la BCL a la GPL
La licencia de código binario para las tecnologías Oracle Java SE ("BCL") ha sido la licencia principal para las tecnologías Oracle Java SE durante más de una década. El BCL permite el uso sin derechos de licencia bajo ciertas condiciones. Para simplificar las cosas en el futuro, Oracle comenzó a proporcionar compilaciones OpenJDK con licencia de código abierto a partir de Java 9, utilizando el mismo modelo de licencia que la plataforma Linux. Si está acostumbrado a obtener los archivos binarios de Oracle Java SE de forma gratuita, simplemente puede continuar haciéndolo con las compilaciones OpenJDK de Oracle disponibles en jdk.java.net . Si está acostumbrado a obtener binarios de Oracle Java SE como parte de un producto o servicio comercial de Oracle, puede continuar obteniendo versiones de Oracle JDK a través de My Oracle Support (MOS) y otras ubicaciones.
Funcionalmente idéntico e intercambiable ...
El JDK con licencia BCL de Oracle contenía históricamente "características comerciales" que no estaban disponibles en las compilaciones de OpenJDK. Sin embargo, como se prometió , durante el año pasado Oracle ha contribuido con estas características a la Comunidad OpenJDK, que incluyen:
Desde Java 11 en adelante, por lo tanto, las compilaciones Oracle JDK y las compilaciones OpenJDK serán esencialmente idénticas.
... pero con algunas diferencias estéticas y de empaque
Sigue habiendo un pequeño número de diferencias, algunas intencionales y cosméticas, y otras simplemente porque se justifica más tiempo para discutir con los contribuyentes de OpenJDK.
Esta diferencia se mantiene para proporcionar una experiencia consistente para tipos específicos de uso heredado. Estos módulos ahora están disponibles por separado como parte de OpenJFX , ahora están tanto en OpenJDK como en Oracle JDK porque eran características comerciales que Oracle contribuyó a OpenJDK (por ejemplo, Flight Recorder), o se eliminaron de Oracle JDK 11 (por ejemplo, JNLP) .
java 11 2018-09-25
Java (TM) SE Runtime Environment 18.9 (compilación 11 + 28)
Servidor Java HotSpot (TM) de 64 bits VM 18.9 (compilación 11 + 28, modo mixto)
Y para una compilación de OpenJDK 11:
versión de openjdk "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (compilación 11 + 28)
OpenJDK 64-Bit Server VM 18.9 (compilación 11 + 28, modo mixto)
fuente
En esta publicación de blog se puede encontrar una lista de las pocas diferencias estéticas y de empaque restantes entre Oracle JDK 11 y OpenJDK 11:
https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later
En breve:
fuente
De Java 11 cambia a un gran cambio
Oracle cambiará su licencia histórica "BCL" con una combinación de código abierto y licencia comercial
Actualización: 25-ago-2019
para más detalles oracle-vs-openjdk
fuente
Además de la diferencia de licencia obvia, la principal diferencia entre OpenJDK y OracleJDK 11 son las actualizaciones de estabilidad y rendimiento.
Fuente: https://www.youtube.com/watch?v=Adv9--6IcQI&t=385
Cada 6 meses, las dos bases de código estarán sincronizadas. Pero durante la ventana de 6 meses, OpenJDK solo recibirá actualizaciones de seguridad, mientras que OracleJDK recibirá actualizaciones adicionales de estabilidad y rendimiento.
Dado que las versiones de actualización solo ocurren cada 3 meses tanto para OpenJDK como para OracleJDK, esto significa que se está perdiendo (como máximo) 3 meses de correcciones hasta que salga la próxima versión principal y actualice. Sin embargo, si elige apegarse a los lanzamientos de LTS, entonces una licencia comercial comienza a tener más sentido.
fuente
También para Java 8, en noviembre de 2018 se publicó un punto de referencia de rendimiento interesante para la aplicación Spring Boot REST reactiva (sin bloqueo) alojada en varias JVM por AMIS Technology Blog que muestra que, entre otras diferencias:
Para más detalles, consulte el artículo fuente.
Por supuesto, YMMV, este es solo uno de los puntos de referencia.
fuente
Entiendo que Oracle JDK no se puede usar en producción, por lo tanto, no puedo usarlo legalmente (sin pagar) para la aplicación web que estoy creando para mi empresa. Tengo que usar OpenJDK. ¡Por favor, corríjame si estoy equivocado! De este artículo .
ACTUALIZACIÓN: estoy equivocado. Puedo usar Oracle JDK de forma gratuita, pero no recibiré actualizaciones de seguridad después de 6 meses y tendremos que asumir el riesgo. Mire la sección del artículo vinculado anteriormente "¿Qué significa el nuevo tren de lanzamiento para mi empresa?".
fuente