NOTA: Esta pergunta é de 2014. A partir do Java 11 OpenJDK e Oracle JDK estão convergindo.
Existem diferenças cruciais entre o Oracle e o OpenJDK?
Por exemplo, a coleta de lixo e outros parâmetros da JVM são os mesmos?
O GC funciona de maneira diferente entre os dois?
java
difference
user1340582
fonte
fonte
Respostas:
O OpenJDK e o Oracle JDK são criados e mantidos atualmente apenas pelo Oracle.
O OpenJDK e o Oracle JDK são implementações da mesma especificação Java aprovada no TCK (Java Technology Certification Kit).
A maioria dos fornecedores de JDK são escritos sobre o OpenJDK, fazendo alguns ajustes para [substituir principalmente peças proprietárias licenciadas / substituir por itens de alto desempenho que funcionam apenas em componentes específicos do SO] sem quebrar a compatibilidade do TCK.
Muitos fornecedores implementaram a especificação Java e passaram o TCK. Por exemplo, IBM J9, Azul Zulu, Azul Zing e Oracle JDK.
Quase todo JDK existente é derivado do OpenJDK.
Conforme sugerido por muitos, o licenciamento é uma alteração entre os JDKs.
A partir do JDK 11, acessando o suporte de longa data, o Oracle JDK / Java SE agora exigirá uma licença comercial. Agora você deve prestar atenção no JDK que está instalando, pois o Oracle JDK sem assinatura pode parar de funcionar. fonte
Ref: Lista de máquinas virtuais Java
fonte
Para o Java 7 , nada crucial. O projeto OpenJDK é baseado principalmente no código-fonte do HotSpot doado pela Sun.
Além disso, o OpenJDK foi selecionado para ser a implementação de referência para Java 7 e é mantido pelos engenheiros da Oracle.
Há uma resposta mais detalhada de 2012 sobre a diferença entre JVM, JDK, JRE e OpenJDK , que se vincula a uma postagem do blog da Oracle :
fonte
Uma diferença importante daqui para frente é o cronograma de lançamento e a política de suporte.
OpenJDK
O OpenJDK terá um release de recurso a cada 6 meses, que é suportado apenas até o próximo release de recurso. É essencialmente um fluxo contínuo de lançamentos direcionados aos desenvolvedores.
Oracle JDK
O Oracle JDK é voltado mais para um público corporativo que valoriza a estabilidade. Ele é baseado em uma das versões do OpenJDK, mas recebe suporte a longo prazo (LTS). O Oracle JDK tem lançamentos planejados a cada 3 anos.
Fonte: https://www.oracle.com/java/java9-screencasts.html?bcid=5582439790001&playerType=single-social&size=events
fonte
Para Java 8 , Oracle JDK x OpenJDK, considero as principais diferenças:
O OpenJDK é uma implementação de código aberto da plataforma Java Standard Edition com a contribuição da Oracle e da comunidade Java aberta.
O OpenJDK é liberado sob a licença GPL v2, em que o Oracle JDK é licenciado sob o Contrato de Licença de Código Binário da Oracle.
Na verdade, o processo de compilação do Oracle JDK se baseia no código-fonte do OpenJDK. Portanto, não há grande diferença técnica entre o Oracle JDK e o OpenJDK. Além do código base, o Oracle JDK inclui a implementação do Java Plugin e Java WebStart pela Oracle. Ele também inclui componentes de código aberto e de código aberto de terceiros, como rasterizador de gráficos e Rhino, respectivamente. O OpenJDK Font Renderer e o Oracle JDK Flight Recorder são as principais diferenças notáveis entre o Oracle JDK e o OpenJDK.
Para obter uma lista completa das diferenças, consulte o artigo de origem: Oracle JDK vs OpenJDK e Java JDK Development Process
fonte
As JVMs do Oracle e do OpenJDK são iguais e possuem os mesmos recursos do GC (nas versões mais recentes 10+). Antes do Oracle gerenciar o OpenJDK JVM, havia diferenças concretas que tornavam o Openjdk JVM antigo quase inutilizável em muitos ambientes. As JVMs agora são as mesmas.
Os JDKs que incluem a JVM como parte do Kit diferem no cronograma de licenciamento, liberação e manutenção e nas bibliotecas de software incluídas no JDK. Diferenças cruciais para mim também significam coisas que tornariam o código não executado se não estivesse presente. Não apenas licenciamento.
Fundamentalmente, os seguintes arquivos estão ausentes, além de vários outros no JDK do linux (por isso, se você 'alegou' que o código não funcionava no OpenJDK e o fazia no OracleJDK enquanto estava usando o javafx, estava correto):
fonte
diff
?De acordo com o blog da Oracle , o Oracle JDK é lançado para Java 11 e posterior
A partir do Java 11, a Oracle fornecerá versões do JDK sob a GNU General Public License v2 de código aberto , com a exceção de caminho de classe (GPLv2 + CPE) e sob uma licença comercial para aqueles que usam o Oracle JDK como parte de um produto ou serviço Oracle, ou quem não deseja usar software de código aberto. Essa combinação de usar uma licença de código aberto e uma licença comercial substitui a licença histórica " BCL ", que possuía uma combinação de termos comerciais gratuitos e pagos.
Compilações diferentes serão fornecidas para cada licença, mas essas compilações são funcionalmente idênticas, exceto por algumas diferenças cosméticas e de embalagem, descritas em detalhes abaixo.
Do BCL à GPL
A Licença de Código Binário para tecnologias Oracle Java SE (“BCL”) é a licença principal para tecnologias Oracle Java SE há mais de uma década. O BCL permite o uso sem taxas de licença sob certas condições. Para simplificar as coisas no futuro, a Oracle começou a fornecer versões OpenJDK licenciadas de código aberto a partir do Java 9, usando o mesmo modelo de licença da plataforma Linux. Se você está acostumado a obter binários do Oracle Java SE gratuitamente, basta continuar fazendo isso com as compilações do OpenJDK da Oracle disponíveis em jdk.java.net . Se você está acostumado a obter binários do Oracle Java SE como parte de um produto ou serviço comercial da Oracle, poderá continuar obtendo versões do Oracle JDK por meio do My Oracle Support (MOS) e outros locais.
Funcionalmente idêntico e intercambiável ...
O JDK licenciado pela BCL da Oracle historicamente continha "recursos comerciais" que não estavam disponíveis nas compilações do OpenJDK. Conforme prometido , no entanto, no ano passado, a Oracle contribuiu com esses recursos para a Comunidade OpenJDK, incluindo:
Do Java 11 em diante, portanto, as versões do Oracle JDK e do OpenJDK serão essencialmente idênticas.
... mas com algumas diferenças cosméticas e de embalagem
Ainda existem um pequeno número de diferenças, algumas intencionais e cosméticas e outras simplesmente porque é necessário mais tempo para discutir com os colaboradores do OpenJDK.
Essa diferença permanece para fornecer uma experiência consistente para tipos específicos de uso herdado. Esses módulos agora estão disponíveis separadamente como parte do OpenJFX , agora no OpenJDK e no Oracle JDK porque eram recursos comerciais que a Oracle contribuiu para o OpenJDK (por exemplo, Flight Recorder) ou foram removidos do Oracle JDK 11 (por exemplo, JNLP) .
java 11 2018-09-25
Java (TM) SE Runtime Environment 18.9 (compilação 11 + 28)
Servidor Java HotSpot (TM) de 64 bits VM 18.9 (compilação 11 + 28, modo misto)
E para uma compilação do OpenJDK 11:
versão do openjdk "11" 25/09/2018
OpenJDK Runtime Environment 18.9 (compilação 11 + 28)
Servidor OpenJDK de 64 bits VM 18.9 (compilação 11 + 28, modo misto)
fonte
Uma lista das poucas diferenças remanescentes de cosméticos e embalagens entre o Oracle JDK 11 e o OpenJDK 11 pode ser encontrada nesta postagem do blog:
https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later
Em resumo:
fonte
Do Java 11, mude para uma grande mudança
A Oracle mudará sua licença histórica "BCL" com uma combinação de uma licença de código aberto e comercial
Atualização: 25-Ago-2019
para mais detalhes oracle-vs-openjdk
fonte
Além da óbvia diferença de licenciamento, a principal diferença entre o OpenJDK e o OracleJDK 11 são as atualizações de estabilidade e desempenho.
Fonte: https://www.youtube.com/watch?v=Adv9--6IcQI&t=385
A cada 6 meses, as duas bases de código estarão sincronizadas. Porém, durante a janela de 6 meses, o OpenJDK receberá apenas atualizações de segurança, enquanto o OracleJDK receberá atualizações adicionais de estabilidade e desempenho.
Dado que as versões de atualização ocorrem apenas a cada três meses para o OpenJDK e o OracleJDK, isso significa que você está perdendo (no máximo) três meses no valor de correções até a próxima versão principal e a atualização. No entanto, se você optar por seguir as versões LTS, uma licença comercial começará a fazer mais sentido.
fonte
Também para Java 8, um interessante benchmark de desempenho para o aplicativo REST Spring Boot reativo (sem bloqueio) hospedado em várias JVMs pelo AMIS Technology Blog foi publicado em novembro de 2018, mostrando que, entre outras diferenças:
Para detalhes, consulte o artigo fonte.
Claro YMMV, este é apenas um dos pontos de referência.
fonte
Meu entendimento é que o Oracle JDK não pode ser usado na produção, portanto, não posso usá-lo legalmente (sem pagar), para o aplicativo Web que estou construindo para minha empresa. Eu tenho que usar o OpenJDK. Por favor corrija-me se eu estiver errado! Deste artigo .
ATUALIZAÇÃO: Estou errado. Posso usar o Oracle JDK gratuitamente, mas não receberei atualizações de segurança após 6 meses e teremos de assumir o risco. Veja a seção de artigo vinculada acima "O que o novo trem de lançamento significa para minha empresa?".
fonte