Różnice między Oracle JDK a OpenJDK

699

UWAGA: To pytanie pochodzi z 2014 r. Począwszy od wersji Java 11 OpenJDK i Oracle JDK są zbieżne.

Czy są jakieś istotne różnice między Oracle a OpenJDK?

Na przykład, czy czyszczenie pamięci i inne parametry JVM są takie same?

Czy GC działa inaczej między nimi?

użytkownik1340582
źródło
3
Może to mieć również znaczenie, jeśli planujesz przejść z Oracle do OpenJDK, ponieważ Oracle nie jest już darmowe. developers.redhat.com/blog/2018/11/05/…
Leo Ufimtsev

Odpowiedzi:

338

Zarówno OpenJDK, jak i Oracle JDK są tworzone i obsługiwane obecnie tylko przez Oracle.

OpenJDK i Oracle JDK są implementacjami tej samej specyfikacji Java, która przeszła przez TCK (Java Technology Certification Kit).

Większość dostawców JDK jest napisanych na OpenJDK, robiąc kilka ulepszeń w [głównie w celu zastąpienia licencjonowanych zastrzeżonych części / zastąpienia bardziej wydajnymi elementami, które działają tylko na określonych komponentach systemu operacyjnego] bez naruszenia kompatybilności TCK.

Wielu dostawców wdrożyło specyfikację Java i zdało TCK. Na przykład IBM J9, Azul Zulu, Azul Zing i Oracle JDK.

Prawie każdy istniejący JDK pochodzi z OpenJDK.

Jak sugeruje wielu, licencjonowanie jest zmianą między pakietami JDK.

Począwszy od JDK 11 uzyskującego dostęp do długoterminowego wsparcia Oracle JDK / Java SE będzie teraz wymagać licencji komercyjnej. Teraz powinieneś zwrócić uwagę na to, który JDK instalujesz, ponieważ Oracle JDK bez subskrypcji może przestać działać. źródło

Zobacz: Lista maszyn wirtualnych Java

Venkateswara Rao
źródło
13
Więc twoje powiedzenie, że openjdk jest linią bazową dla wszystkich innych jdk, tylko że kopiują go, a następnie dostosowują po własnych specyfikacjach?
Karl Morrison,
24
Spóźniam się na przyjęcie, ale i tak zapytam. Co JDK wprowadza do tabeli, czego nie robi OpenJDK? Wszystkie te odpowiedzi sprawiają, że openjdk brzmi, jakby był równy lub lepszy pod każdym względem, ale jeśli tak, to dlaczego Oracle w ogóle dba o utrzymanie jdk?
Kefka
@ Karl Morrison O ile mi wiadomo ... wszyscy wdrażający specyfikację JVM robią tylko w ten sposób ... ale nie ma wyraźnej zasady, że należy postępować w ten sposób ...
Venkateswara Rao
13
@ Mella OpenJDK <= OracleJDK Na przykład Oracle JDK ma skonfigurowanych kilka zaufanych kluczy, których nie było w OpenJDK (teraz ludzie importują je tylko w celu wypełnienia tej luki) Oracle JDK ma kilka bibliotek SWING, które są zastrzeżone dla przyspieszenia renderowania .. (Kto kiedykolwiek tworzy aplikacje serwerowe, może być dla nich nieistotny) Oracle JDK ma wtyczkę apletową (Taki sam powód powyżej działa) Oracle JDK bug fix / hotfix będzie dystrybuowany i obsługiwany poprawnie przez Oracle, gdzie jako OpenJDK jest mało techniczne, aby zapewnić wszystkie łatki są stosowane i jaki mieliby konflikt
Venkateswara Rao
Uwaga: w nowym modelu wersji dla Java, Oracle planuje jak najbardziej zmniejszyć różnicę między obydwoma pakietami jdk. Czy są inni współautorzy open source do open jdk inni niż deweloperzy Oracle? Ma to na celu zrozumienie, czy będzie wystarczająca obsługa, aby cofnąć poprawkę z najnowszej wersji do poprzedniej wersji. jakieś pomysły?
Andy Dufresne
329

W przypadku Java 7 nic nie jest istotne. Projekt OpenJDK opiera się głównie na kodzie źródłowym HotSpot podarowanym przez firmę Sun.

Co więcej, OpenJDK został wybrany jako referencyjna implementacja Java 7 i jest obsługiwany przez inżynierów Oracle.

Bardziej szczegółowa odpowiedź z 2012 roku na temat różnic między JVM, JDK, JRE i OpenJDK , która prowadzi do postu na blogu Oracle :

P : Jaka jest różnica między kodem źródłowym znalezionym w repozytorium OpenJDK, a kodem używanym do budowania Oracle JDK?

Odp . : Jest bardzo blisko - nasz proces kompilacji dla Oracle JDK wydaje kompilacje na OpenJDK 7, dodając tylko kilka elementów, takich jak kod wdrażania, który obejmuje implementację wtyczki Java i Java WebStart firmy Oracle, a także niektóre trzecie zamknięte źródło komponenty firm, takie jak rasterizer grafiki, niektóre komponenty firm trzecich typu open source, takie jak Rhino, oraz kilka fragmentów tu i tam, takich jak dodatkowa dokumentacja lub czcionki innych firm. Idąc dalej, naszym celem jest otwarcie źródła wszystkich elementów Oracle JDK oprócz tych, które uważamy za funkcje komercyjne, takie jak JRockit Mission Control (niedostępne jeszcze w Oracle JDK), i zastąpienie obciążonych komponentów stron trzecich alternatywnymi rozwiązaniami typu open source w celu osiągnięcia bliższej parytetu między bazami kodu.

Radai
źródło
42
Istnieją również różnice licencyjne.
mcoolive
9
dzięki znalazłem lepszą odpowiedź. stackoverflow.com/questions/17360011/…
astroanu
9
Na ARM przynajmniej te dwa wydają się znacznie różnić pod względem wydajności. Musiałbym zrobić kilka profili, dlaczego tak się dzieje, ale subiektywna różnica polega na tym, że „Oracle JDK jest w porządku” i „OpenJDK jest całkowicie bezużyteczny”.
podwójny
1
@dualed jednak Android przechodzi na openjdk, zaczynając od Androida 7. Wygląda na to, że przygotowują znaczące ulepszenia. venturebeat.com/2015/12/29/…
Johnny Doe
1
@JohnnyDoe Miejmy nadzieję, że jeśli Google przejdzie na OpenJDK, dostarczy upstream z poprawkami wydajności, aby działał dobrze na ARM poza Androidem!
podwójny
95

Kluczową różnicą w przyszłości jest harmonogram wydania i polityka wsparcia.

OpenJDK

OpenJDK będzie wypuszczać funkcję co 6 miesięcy, która jest obsługiwana tylko do następnej wersji funkcji. Zasadniczo jest to ciągły strumień wydań skierowanych do programistów.

Oracle JDK

Oracle JDK jest bardziej ukierunkowany na odbiorców biznesowych, którzy cenią stabilność. Opiera się na jednej z wersji OpenJDK, ale otrzymuje długoterminowe wsparcie (LTS). Wydania Oracle JDK są planowane co 3 lata.

wprowadź opis zdjęcia tutaj

Źródło: https://www.oracle.com/java/java9-screencasts.html?bcid=5582439790001&playerType=single-social&size=events

Gilbert Arenas Dagger
źródło
3
Wydania długoterminowe wymagają zakupu wsparcia komercyjnego w celu uzyskania aktualizacji po 6 miesiącach od wydania java. Jakie jest znaczenie wydań długoterminowych w porównaniu z wydaniami krótkoterminowymi? Czy wydania krótkoterminowe, takie jak JDK 9/10, nie mają komercyjnego wsparcia ze strony Oracle?
Andy Dufresne,
@AndyDufresne, dlaczego uważasz, że będziesz musiał zapłacić za wsparcie już po 6 miesiącach? Rozumiem, że oś czasu to TBD. 6 miesięcy wydaje się okropnie krótki ... Wątpię, czy możemy spodziewać się publicznych aktualizacji przez 5 lat, tak jak Java 8, ale nie byłbym zaskoczony, gdyby były publiczne aktualizacje przez 2 lub 3 lata. Odniesienie - jest to na: oracle.com/technetwork/java/eol-135779.html .
Gilbert Arenas Dagger
1
Łącze Oracle mówi „Na przykład wydanie LTS dla Oracle JDK 11 (18,9 LTS) będzie obsługiwane przez co najmniej 5 lat, zgodnie z opisem w Zasadach wsparcia Oracle Lifetime”. Polityka ma 3 poziomy wsparcia, z których żaden nie wygląda na bezpłatny. Wspominam o tym również po zapoznaniu się z komentarzem Azul CTO tutaj - blog.takipi.com/java-11-will-include-more-than-just-features/… . Głównym celem tej nowej strategii wydawniczej jest nie poświęcanie czasu na utrzymanie starych wydań. Gdyby wsparcie było bezpłatne, model byłby taki sam jak dotychczas.
Andy Dufresne,
38

W przypadku Javy 8 , Oracle JDK vs. OpenJDK moje podejście do głównych różnic:

  • OpenJDK to implementacja open source platformy Java Standard Edition z udziałem Oracle i społeczności Open Java.

  • OpenJDK jest wydany na licencji GPL v2, przy czym Oracle JDK jest licencjonowany na podstawie umowy licencyjnej Oracle Binary Code.

  • W rzeczywistości proces kompilacji Oracle JDK buduje się z kodu źródłowego OpenJDK. Nie ma więc istotnej różnicy technicznej między Oracle JDK a OpenJDK. Oprócz kodu bazowego Oracle JDK obejmuje implementację wtyczki Java i Java WebStart firmy Oracle. Obejmuje również komponenty zamknięte i otwarte źródła innych firm, takie jak odpowiednio rasterizer grafiki i Rhino . Renderer czcionek OpenJDK i rejestrator lotów Oracle JDK to zauważalne główne różnice między Oracle JDK a OpenJDK.

  • Rockit był JVM Oracle, a od Java SE 7 HotSpot i JRockit połączyły się w jedną JVM. Więc teraz mamy tylko scaloną JVM HotSpot.
  • Są przypadki, w których ludzie twierdzą, że mieli problemy podczas uruchamiania OpenJDK i które zostały rozwiązane po przejściu na Oracle JDK.
  • Twitter ma swój własny pakiet JDK.
  • Oprogramowanie takie jak Minecraft oczekuje użycia Oracle JDK. W rzeczywistości ostrzega.

Pełna lista różnic znajduje się w artykule źródłowym: Oracle JDK vs OpenJDK i Java JDK Development Process

45hook
źródło
4
W przypadku Androida Studio nie jest to już prawdą: kopia najnowszego OpenJDK jest dostarczana w pakiecie z Android Studio 2.2 i nowszym, i jest to wersja JDK, której zalecamy używać w swoich projektach na Androida. Źródło: developer.android.com/studio/intro/studio-config#jdk
MKesper
„Oprogramowanie takie jak Minecraft oczekuje użycia Oracle JDK. W rzeczywistości ostrzega ”. W rzeczywistości w Ubuntu oficjalny instalator .deb Mojanga pobiera OpenJDK podczas instalowania programu uruchamiającego.
Moilleadóir
29

JVM Oracle i OpenJDK są takie same i mają te same funkcje GC (od najnowszych wersji 10+). Przed Oracle zarządzającym OpenJDK JVM istniały konkretne różnice, które sprawiły, że ten stary Openjdk JVM był prawie bezużyteczny w wielu środowiskach. JVM są teraz takie same.

Zestawy JDK, które zawierają JVM jako część zestawu, różnią się harmonogramem licencjonowania, wydania i konserwacji oraz bibliotekami oprogramowania zawartymi w JDK. Istotne dla mnie różnice oznaczają również rzeczy, które spowodowałyby, że kod nie działałby, gdyby nie był obecny. Nie tylko licencjonowanie.

diff --brief -r openjdk oraclejdk

Zasadniczo brakuje następujących plików oprócz kilku innych w Linuksie JDK (więc jeśli „twierdziłeś”, że kod nie działał w OpenJDK i zrobił to w OracleJDK podczas korzystania z javafx, to masz rację):

Only in jdk-10.0.1/bin: javapackager
Only in jdk-10.0.1/bin: javaws
Only in jdk-10.0.1/bin: jcontrol
Only in jdk-10.0.1/bin: jmc
Only in jdk-10.0.1/bin: jweblauncher
Only in jdk-10.0.1/lib: ant-javafx.jar
Only in jdk-10.0.1/lib: deploy
Only in jdk-10.0.1/lib: deploy.jar
Only in jdk-10.0.1/lib: desktop
Only in jdk-10.0.1/lib: fontconfig.bfc
Only in jdk-10.0.1/lib: fontconfig.properties.src
Only in jdk-10.0.1/lib: fontconfig.RedHat.6.bfc
Only in jdk-10.0.1/lib: fontconfig.RedHat.6.properties.src
Only in jdk-10.0.1/lib: fontconfig.SuSE.11.bfc
Only in jdk-10.0.1/lib: fontconfig.SuSE.11.properties.src
Only in jdk-10.0.1/lib: fonts
Only in jdk-10.0.1/lib: javafx.properties
Only in jdk-10.0.1/lib: javafx-swt.jar
Only in jdk-10.0.1/lib: java.jnlp.jar
Only in jdk-10.0.1/lib: javaws.jar
Only in jdk-10.0.1/lib: jdk.deploy.jar
Only in jdk-10.0.1/lib: jdk.javaws.jar
Only in jdk-10.0.1/lib: jdk.plugin.jar
Only in jdk-10.0.1/lib: jfr
Only in jdk-10.0.1/lib: libavplugin-53.so
Only in jdk-10.0.1/lib: libavplugin-54.so
Only in jdk-10.0.1/lib: libavplugin-55.so
Only in jdk-10.0.1/lib: libavplugin-56.so
Only in jdk-10.0.1/lib: libavplugin-57.so
Only in jdk-10.0.1/lib: libavplugin-ffmpeg-56.so
Only in jdk-10.0.1/lib: libavplugin-ffmpeg-57.so
Only in jdk-10.0.1/lib: libbci.so
Only in jdk-10.0.1/lib: libcmm.so
Only in jdk-10.0.1/lib: libdecora_sse.so
Only in jdk-10.0.1/lib: libdeploy.so
Only in jdk-10.0.1/lib: libfxplugins.so
Only in jdk-10.0.1/lib: libglassgtk2.so
Only in jdk-10.0.1/lib: libglassgtk3.so
Only in jdk-10.0.1/lib: libglass.so
Only in jdk-10.0.1/lib: libgstreamer-lite.so
Only in jdk-10.0.1/lib: libjavafx_font_freetype.so
Only in jdk-10.0.1/lib: libjavafx_font_pango.so
Only in jdk-10.0.1/lib: libjavafx_font.so
Only in jdk-10.0.1/lib: libjavafx_iio.so
Only in jdk-10.0.1/lib: libjfxmedia.so
Only in jdk-10.0.1/lib: libjfxwebkit.so
Only in jdk-10.0.1/lib: libnpjp2.so
Only in jdk-10.0.1/lib: libprism_common.so
Only in jdk-10.0.1/lib: libprism_es2.so
Only in jdk-10.0.1/lib: libprism_sw.so
Only in jdk-10.0.1/lib: librm.so
Only in jdk-10.0.1/lib: libt2k.so
Only in jdk-10.0.1/lib: locale
Only in jdk-10.0.1/lib: missioncontrol
Only in jdk-10.0.1/lib: oblique-fonts
Only in jdk-10.0.1/lib: plugin.jar
Only in jdk-10.0.1/lib: plugin-legacy.jar
Only in jdk-10.0.1/lib/security: blacklist
Only in jdk-10.0.1/lib/security: public_suffix_list.dat
Only in jdk-10.0.1/lib/security: trusted.libraries
Only in openjdk-10.0.1: man`
Mars
źródło
5
Dziękujemy za wskazanie prawdziwych różnic: brak działania kodu jest sprawą rzeczywistą. Skąd bazowałeś diff?
Matthieu,
19

Według blogu Oracle , Oracle JDK prasowe dla Java 11 i nowszych

Począwszy od wersji Java 11, Oracle będzie dostarczać wersje JDK w ramach licencji Open Source GNU General Public License v2, z wyjątkiem Classpath Exception (GPLv2 + CPE) , a także w ramach licencji komercyjnej dla osób korzystających z Oracle JDK jako części produktu lub usługi Oracle, lub którzy nie chcą korzystać z oprogramowania typu open source. To połączenie używania licencji typu open source i licencji komercyjnej zastępuje historyczną licencję „ BCL ”, która zawierała kombinację bezpłatnych i płatnych warunków handlowych.

Dla każdej licencji zostaną udostępnione różne kompilacje, ale te kompilacje są funkcjonalnie identyczne, pomijając pewne różnice kosmetyczne i różnice w opakowaniu, opisane szczegółowo poniżej.

Od BCL do GPL

Licencja kodu binarnego na technologii Oracle Java SE ( „BCL”) został głównym licencja na technologii Oracle Java SE przez ponad dekadę. BCL zezwala na korzystanie bez opłat licencyjnych pod pewnymi warunkami. Aby uprościć dalsze działania, Oracle zaczął dostarczać kompilacje OpenJDK na licencji Open Source od wersji Java 9, używając tego samego modelu licencji co platforma Linux. Jeśli jesteś przyzwyczajony do otrzymywania plików binarnych Oracle Java SE za darmo, możesz to po prostu kontynuować dzięki kompilacjom OpenJDK Oracle dostępnym na stronie jdk.java.net . Jeśli jesteś przyzwyczajony do pobierania plików binarnych Oracle Java SE jako części komercyjnego produktu lub usługi Oracle, możesz nadal otrzymywać wersje Oracle JDK za pośrednictwem My Oracle Support (MOS) i innych lokalizacji.

Funkcjonalnie identyczne i wymienne ...

Licencjonowany przez Oracle BCL JDK historycznie zawierał „funkcje komercyjne”, które nie były dostępne w kompilacjach OpenJDK. Jednak zgodnie z obietnicą w ciągu ostatniego roku firma Oracle wniosła te funkcje do społeczności OpenJDK, w tym:

Dlatego od wersji Java 11 kompilacje Oracle JDK i kompilacje OpenJDK będą zasadniczo identyczne.

... ale z pewnymi różnicami kosmetycznymi i dotyczącymi pakowania

Pozostaje niewielka liczba różnic, niektóre celowe i kosmetyczne, a niektóre po prostu dlatego, że uzasadniony jest dłuższy czas na dyskusję z autorami OpenJDK.

  • Oracle JDK 11 emituje ostrzeżenie podczas korzystania z opcji -XX: + UnlockCommercialFeatures, podczas gdy w kompilacjach OpenJDK ta opcja powoduje błąd. Ta opcja nigdy nie była częścią OpenJDK i nie ma sensu dodawać jej teraz, ponieważ w OpenJDK nie ma żadnych funkcji komercyjnych. Ta różnica pozostaje, aby ułatwić użytkownikom Oracle JDK 10 i wcześniejszych wersji migrację do Oracle JDK 11 i nowszych.
  • Oracle JDK 11 można skonfigurować tak, aby dostarczał dane dziennika użytkowania do narzędzia „ Advanced Management Console ”, które jest oddzielnym komercyjnym produktem Oracle. Będziemy współpracować z innymi uczestnikami OpenJDK, aby omówić, w jaki sposób takie dane o użytkowaniu mogą być przydatne w OpenJDK, jeśli w ogóle. Ta różnica pozostaje przede wszystkim w celu zapewnienia spójnego doświadczenia klientom Oracle do czasu podjęcia takich decyzji.
  • Komenda javac --release zachowuje się inaczej w przypadku celów Java 9 i Java 10, ponieważ w tych wersjach Oracle JDK zawierał dodatkowe moduły, które nie były częścią odpowiednich wersji OpenJDK:
    • javafx.base
    • javafx.controls
    • javafx.fxml
    • javafx.graphics
    • javafx.media
    • javafx.web
    • java.jnlp
    • jdk.jfr
    • jdk.management.cmm
    • jdk.management.jfr
    • jdk.management.resource
    • jdk.packager.services
    • jdk.snmp

Różnica ta pozostaje, aby zapewnić spójne wrażenia w przypadku określonych rodzajów starszych zastosowań. Moduły te są teraz dostępne osobno jako część OpenJFX , są teraz zarówno w OpenJDK, jak i Oracle JDK, ponieważ były to funkcje komercyjne, które Oracle przyczyniły się do OpenJDK (np. Flight Recorder), lub zostały usunięte z Oracle JDK 11 (np. JNLP) .

  • Dane wyjściowe poleceń java --version i java -fullversion odróżnią kompilacje Oracle JDK od kompilacji OpenJDK, dzięki czemu zespoły wsparcia mogą zdiagnozować wszelkie problemy, które mogą wystąpić. W szczególności uruchomienie wersji Java z wersją Oracle JDK 11 powoduje:

11 stycznia 2018-09-25

Środowisko wykonawcze Java (TM) SE 18.9 (kompilacja 11 + 28)

64-bitowy serwer VM HotSpot (TM) VM 18,9 (kompilacja 11 + 28, tryb mieszany)

A dla wersji OpenJDK 11:

wersja openjdk „11” 2018-09-25

Środowisko wykonawcze OpenJDK 18.9 (kompilacja 11 + 28)

Serwer OpenJDK 64-bit VM 18.9 (kompilacja 11 + 28, tryb mieszany)

  • Oracle JDK zawsze wymagał podpisania przez zewnętrznych dostawców usług kryptograficznych znanym certyfikatem. Struktura kryptografii w OpenJDK ma otwarty interfejs kryptograficzny, co oznacza, że ​​nie ogranicza to dostawców, których można użyć. Oracle JDK 11 będzie nadal wymagał prawidłowego podpisu, a kompilacje Oracle OpenJDK będą nadal pozwalały na użycie ważnego podpisu lub niepodpisanego zewnętrznego dostawcy kryptografii.
  • Oracle JDK 11 będzie nadal zawierał instalatory, branding i pakiet JRE, aby zapewnić spójność ze starszymi aplikacjami komputerowymi. Kompilacje Oracle OpenJDK są obecnie dostępne jako pliki zip i tar.gz, podczas gdy rozważane są alternatywne formaty dystrybucji.
Naresh Joshi
źródło
10

Listę kilku pozostałych różnic kosmetycznych i opakowaniowych między Oracle JDK 11 a OpenJDK 11 można znaleźć w tym poście na blogu:

https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later

W skrócie:

  • Oracle JDK 11 emituje ostrzeżenie podczas korzystania z opcji -XX: + UnlockCommercialFeatures,
  • można go skonfigurować tak, aby dostarczał dane dziennika użytkowania do narzędzia „Advanced Management Console”,
  • zawsze wymagało podpisania przez zewnętrznych dostawców usług kryptograficznych znanego certyfikatu,
  • nadal będzie obejmować instalatorów, branding i opakowania JRE,
  • podczas gdy komenda javac --release zachowuje się nieco inaczej w przypadku celów Java 9 i Java 10, oraz
  • wynik komend java --version i java -fullversion rozróżni kompilacje Oracle JDK od kompilacji OpenJDK.
Temat Dalibor
źródło
2
Zauważyłem, że większość twoich odpowiedzi miała podpis. Zedytowałem je. Proszę przeczytać Czy slogany i podpisy są niedozwolone? i stackoverflow.com/help/behavior (konkretnie sekcja „Nie używaj podpisu, sloganów ani pozdrowienia.”)
Mark Rotteveel,
7
  1. Oracle będzie dostarczać wersje co trzy lata, a OpenJDK będzie wydawane co sześć miesięcy.
  2. Oracle zapewnia długoterminowe wsparcie dla swoich wydań. Z drugiej strony OpenJDK obsługuje zmiany w wydaniu tylko do momentu wydania następnej wersji.
  3. Oracle JDK był licencjonowany na podstawie umowy licencyjnej Oracle Binary Code, podczas gdy OpenJDK ma GNU General Public License (GNU GPL) wersja 2 z wyjątkiem linkowania.
  4. Produkt Oracle ma funkcje Flight Recorder, Java Mission Control i Application Class-Data Sharing, a OpenJDK ma funkcję Renderer czcionek. Ponadto Oracle ma więcej opcji Garbage Collection i lepsze rendery,
  5. Oracle JDK jest w pełni opracowany przez Oracle Corporation, natomiast OpenJDK jest opracowany przez Oracle, OpenJDK i społeczność Java. Jednak wiodące firmy, takie jak Red Hat, Azul Systems, IBM, Apple Inc., SAP AG, również biorą aktywny udział w jego rozwoju.

Z Java 11 zmieniamy się w dużą zmianę

Oracle zmieni swoją dotychczasową licencję „BCL” na kombinację licencji typu open source i licencji komercyjnej

  • Zestaw Oracle dla Java 11 emituje ostrzeżenie podczas korzystania z opcji -XX: + UnlockCommercialFeatures, podczas gdy w kompilacjach OpenJDK ta opcja powoduje błąd
  • Oracle JDK oferuje konfigurację dostarczania danych dziennika użytkowania do narzędzia „Advanced Management Console”
  • Oracle zawsze wymagało podpisywania zewnętrznych dostawców usług kryptograficznych znanym certyfikatem, podczas gdy platforma kryptograficzna w OpenJDK ma otwarty interfejs kryptograficzny, co oznacza, że ​​nie ma ograniczeń co do tego, którzy dostawcy mogą być wykorzystywani
  • Oracle JDK 11 będzie nadal zawierać instalatory, branding i pakiety JRE, podczas gdy kompilacje OpenJDK są obecnie dostępne jako pliki zip i tar.gz
  • Komenda javac –release zachowuje się inaczej w przypadku celów Java 9 i Java 10 ze względu na obecność niektórych dodatkowych modułów w wydaniu Oracle
  • Dane wyjściowe komend java –version i java -fullversion odróżnią kompilacje Oracle od kompilacji OpenJDK


Aktualizacja: 25 sierpnia 2019 r



wprowadź opis zdjęcia tutaj

po więcej szczegółów oracle-vs-openjdk

Istiaque Hossain
źródło
5

Oprócz oczywistej różnicy w licencjonowaniu, główną różnicą między OpenJDK a OracleJDK 11 są aktualizacje stabilności i wydajności.

Źródło: https://www.youtube.com/watch?v=Adv9--6IcQI&t=385

Co 6 miesięcy obie bazy kodów będą zsynchronizowane. Ale w 6-miesięcznym oknie OpenJDK będzie otrzymywać tylko aktualizacje zabezpieczeń, podczas gdy OracleJDK otrzyma dodatkowe aktualizacje dotyczące stabilności i wydajności.

Biorąc pod uwagę, że aktualizacje pojawiają się co 3 miesiące zarówno dla OpenJDK, jak i OracleJDK, oznacza to, że brakuje Ci (co najwyżej) 3 miesięcy poprawek do momentu pojawienia się kolejnej głównej wersji i aktualizacji. Jeśli jednak zdecydujesz się pozostać przy wersjach LTS, licencja komercyjna zaczyna mieć sens.

Gili
źródło
3

Również dla Javy 8 interesujący benchmarku wydajność dla reaktywnego (nieblokującą) Wiosna Boot aplikacja reszta jest utrzymywana na różnych JVMs przez AMIS Technologii Blog zostało opublikowane w listopadzie 2018 roku wykazujące, że wśród innych różnic:

  • OpenJDK ma większe użycie procesora niż OracleJDK,
  • OpenJDK ma nieco krótszy czas odpowiedzi niż OracleJDK,
  • OpenJDK ma większe wykorzystanie pamięci niż OracleJDK,

Szczegółowe informacje można znaleźć w artykule źródłowym.

Oczywiście YMMV, to tylko jeden z punktów odniesienia.

Greg Dubicki
źródło
3

Rozumiem, że Oracle JDK nie może być wykorzystywany w produkcji, dlatego nie mogę go legalnie używać (bez płacenia), dla aplikacji internetowej, którą tworzę dla mojej firmy. Muszę użyć OpenJDK. Proszę, popraw mnie jeśli się mylę! Z tego artykułu .

Począwszy od Java 11, Oracle JDK jest ograniczony do środowisk programistycznych i testowych. Zestawy Oracle JDK mogą być wykorzystywane w produkcji tylko wtedy, gdy kupisz wsparcie komercyjne. Zamiast tego Oracle dostarczy za darmo kompilacje Java oparte na OpenJDK, które można wykorzystać w produkcji. Ale dla oficjalnej Oracle JDK prawdziwa mapa drogowa będzie wyglądać następująco:

AKTUALIZACJA: Mylę się. Mogę używać Oracle JDK za darmo, ale nie otrzymam aktualizacji zabezpieczeń po 6 miesiącach i będziemy musieli podjąć ryzyko. Spójrz na powyższy link do artykułu „Co oznacza nowy ciąg wydań dla mojej firmy?”.

nettie
źródło
To może nie być prawdą od JDK 13. Według Oracle jest nowa licencja na Oracle JDK: „Nowa licencja zezwala na pewne zastosowania, takie jak użytek osobisty i użytkowanie programistyczne, bez żadnych kosztów - ale inne zastosowania dozwolone na podstawie wcześniejsze licencje Oracle JDK mogą nie być już dostępne ”. Zobacz oracle.com/downloads/licenses/javase-license1.html .
AL Flanagan
Chciałem tylko wiedzieć, że aktualne wydanie oracle jdk8u241 jest bezpłatne do użytku produkcyjnego?
Nirav Shah