NOT: Bu soru 2014'ten gelmektedir. Java 11'den itibaren OpenJDK ve Oracle JDK birbirine yaklaşmaktadır.
Oracle ve OpenJDK arasında önemli farklar var mı?
Örneğin, çöp toplama ve diğer JVM parametreleri aynı mı?
GC ikisi arasında farklı mı çalışıyor?
NOT: Bu soru 2014'ten gelmektedir. Java 11'den itibaren OpenJDK ve Oracle JDK birbirine yaklaşmaktadır.
Oracle ve OpenJDK arasında önemli farklar var mı?
Örneğin, çöp toplama ve diğer JVM parametreleri aynı mı?
GC ikisi arasında farklı mı çalışıyor?
Yanıtlar:
Hem OpenJDK hem de Oracle JDK şu anda yalnızca Oracle tarafından oluşturulmakta ve korunmaktadır.
OpenJDK ve Oracle JDK, TCK'dan (Java Teknoloji Sertifikasyon Kiti) geçen aynı Java spesifikasyonunun uygulamalarıdır.
JDK satıcılarının çoğu, TCK uyumluluğunu bozmadan [çoğunlukla lisanslı tescilli parçaları değiştirmek / yalnızca belirli işletim sistemlerinde çalışan daha yüksek performanslı öğelerle değiştirmek] için birkaç ince ayar yaparak OpenJDK'nın üzerine yazılmıştır.
Birçok tedarikçi Java spesifikasyonunu uyguladı ve TCK'yı geçti. Örneğin, IBM J9, Azul Zulu, Azul Zing ve Oracle JDK.
Neredeyse her mevcut JDK, OpenJDK'den türetilmiştir.
Birçok kişi tarafından önerildiği gibi, lisanslama JDK'lar arasındaki bir değişikliktir.
JDK 11'in uzun süreli desteğe erişmesi ile başlayarak Oracle JDK / Java SE için artık ticari lisans gerekir. Abonelik olmadan Oracle JDK olarak durabileceğinden, hangi JDK'yı yüklediğinize dikkat etmelisiniz. kaynak
İçin Java 7 , önemli bir şey. OpenJDK projesi çoğunlukla Sun tarafından bağışlanan HotSpot kaynak koduna dayanmaktadır .
Ayrıca, OpenJDK, Java 7 için referans uygulama olarak seçilmiştir ve Oracle mühendisleri tarafından korunmaktadır.
Bir Oracle blog yayınına bağlanan JVM, JDK, JRE ve OpenJDK arasındaki fark hakkında 2012'den daha ayrıntılı bir cevap var :
S : OpenJDK deposunda bulunan kaynak kodu ile Oracle JDK'yı oluşturmak için kullandığınız kod arasındaki fark nedir?
C : Çok yakın - Oracle JDK için oluşturma sürecimiz, Oracle'ın Java Plugin ve Java WebStart uygulamasını ve ayrıca bazı kapalı kaynak üçüncü uygulamaları içeren dağıtım kodu gibi sadece birkaç parça ekleyerek OpenJDK 7'yi geliştiriyor grafik rasterleştirici gibi parti bileşenleri, Rhino gibi bazı açık kaynaklı üçüncü taraf bileşenler ve ek belgeler veya üçüncü taraf yazı tipleri gibi birkaç bit ve parça burada. İleride amacımız, JRockit Mission Control (henüz Oracle JDK'da mevcut değil) gibi ticari özellikleri dikkate aldığımız durumlar dışında Oracle JDK'nın tüm parçalarını açık kaynak yapmak ve daha yakın parite elde etmek için ipli üçüncü taraf bileşenlerini açık kaynak alternatifleriyle değiştirmek kod tabanları arasında.
Gelecekte önemli bir fark, sürüm programı ve destek politikasıdır.
OpenJDK, her 6 ayda bir, yalnızca bir sonraki özellik sürümüne kadar desteklenen bir özellik sürümüne sahip olacaktır. Bu aslında geliştiricilere yönelik sürekli bir yayın akışıdır.
Oracle JDK daha çok istikrara değer veren bir kurumsal kitleye yöneliktir. OpenJDK sürümlerinden birine dayanmaktadır, ancak daha sonra uzun vadeli destek (LTS) verilmektedir. Oracle JDK, her 3 yılda bir planlanan sürümleri yayınlamaktadır.
İçin Java 8 , OpenJDK vs Oracle JDK temel farklılıklardan almak Gözat:
OpenJDK, Oracle ve açık Java topluluğunun katkılarıyla Java Standard Edition platformunun açık kaynaklı bir uygulamasıdır.
OpenJDK, Oracle JDK'nın Oracle Binary Code Lisans Anlaşması kapsamında lisanslandığı GPL v2 lisansı altında yayınlandı.
Aslında, Oracle JDK'nın oluşturma işlemi OpenJDK kaynak kodundan oluşturulur. Dolayısıyla, Oracle JDK ve OpenJDK arasında önemli bir teknik fark yoktur. Temel kodun yanı sıra Oracle JDK, Oracle'ın Java Plugin ve Java WebStart uygulamasını içerir. Ayrıca sırasıyla üçüncü taraf kapalı kaynak ve grafik rasterleştirici ve Rhino gibi açık kaynak bileşenleri içerir . OpenJDK Yazı Tipi Oluşturucu ve Oracle JDK Uçuş Kaydedici, Oracle JDK ve OpenJDK arasındaki önemli farklardır.
Farklılıkların tam listesi için lütfen kaynak makaleye bakın: Oracle JDK vs OpenJDK ve Java JDK Geliştirme Süreci
Oracle ve OpenJDK JVM'leri aynıdır ve aynı GC özelliklerine sahiptir (en son 10+ sürümünden itibaren). Oracle'ın OpenJDK JVM'yi yönetmesinden önce, eski Openjdk JVM'yi birçok ortamda neredeyse kullanılamaz hale getiren somut farklılıklar vardı. JVM'ler artık aynı.
Kit'in bir parçası olarak JVM'yi içeren JDK'lar lisanslama, sürüm ve bakım programına ve JDK'da bulunan yazılım kitaplıklarına göre farklılık gösterir. Benim için önemli farklılıklar, kodun mevcut olmaması durumunda çalıştırılmasını sağlayacak şeyler anlamına da geliyor. Sadece lisanslama değil.
diff --brief -r openjdk oraclejdk
Önemli olarak, aşağıdaki dosyalar linux JDK'daki diğer gruplara ek olarak eksiktir (Bu nedenle, bu kodu OpenJDK üzerinde çalışmadı ve javafx kullanırken OracleJDK'da yaptığını iddia ederseniz, o zaman doğruydunuz):
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`
diff?
Oracle bloguna göre, Java 11 ve Üstü için Oracle JDK Bültenleri
Java 11'den başlayarak Oracle, açık kaynak GNU Genel Kamu Lisansı v2 altında, Classpath İstisnası (GPLv2 + CPE) ve Oracle JDK'yı Oracle ürün veya hizmetinin bir parçası olarak kullananlar için ticari lisans altında JDK sürümleri sunacaktır. veya açık kaynaklı yazılım kullanmak istemeyenler. Açık kaynak lisansı ve ticari lisans kullanmanın bu birleşimi, ücretsiz ve ücretli ticari terimlerin birleşimine sahip olan tarihi “ BCL ” lisansının yerini alır .
Her lisans için farklı sürümler sağlanacaktır, ancak bu sürümler, aşağıda ayrıntılı olarak açıklanan bazı kozmetik ve ambalaj farklılıkları dışında işlevsel olarak aynıdır.
BCL'den GPL'ye
Oracle Java SE teknolojilerinin ( “BCL”) için İkili Kod Lisans iyi bir on yıl için Oracle Java SE teknolojiler için birincil lisans olmuştur. BCL, belirli koşullar altında lisans ücreti olmadan kullanıma izin verir. İleride işleri kolaylaştırmak için Oracle , Linux platformuyla aynı lisans modelini kullanarak Java 9'dan itibaren açık kaynaklı lisanslı OpenJDK derlemeleri sağlamaya başladı . Oracle Java SE ikili dosyalarını ücretsiz almaya alışkınsanız , jdk.java.net adresinde bulunan Oracle'ın OpenJDK yapılarıyla bunu yapmaya devam edebilirsiniz . Oracle'ın ticari bir ürün veya hizmetinin bir parçası olarak Oracle Java SE ikili dosyalarını almaya alışkınsanız, Oracle Destek (MOS) ve diğer konumlar aracılığıyla Oracle JDK sürümlerini almaya devam edebilirsiniz .
İşlevsel olarak aynı ve değiştirilebilir ...
Oracle'ın BCL lisanslı JDK'sında tarihsel olarak OpenJDK sürümlerinde bulunmayan “ticari özellikler” vardı. Bununla birlikte, vaat edildiği gibi, geçtiğimiz yıl boyunca Oracle, OpenJDK Topluluğuna şu özelliklere katkıda bulundu:
Bu nedenle Java 11'den itibaren Oracle JDK derlemeleri ve OpenJDK derlemeleri esasen aynı olacaktır.
... yine de bazı kozmetik ve ambalaj farklılıklarıyla
Bazıları kasıtlı ve kozmetik olan az sayıda farklılık kalmıştır ve bazıları sadece OpenJDK katılımcılarıyla görüşmek için daha fazla zaman gerektiğinden garanti edilmektedir.
Bu fark, belirli eski kullanım türleri için tutarlı bir deneyim sağlamak amacıyla devam etmektedir. Bu modüller artık OpenJFX'in bir parçası olarak ayrı olarak satılmaktadır , hem OpenJDK'da hem de Oracle JDK'da bulunmaktadır , çünkü bunlar Oracle'ın OpenJDK'ya katkıda bulunduğu (örneğin, Uçuş Kaydedici) ticari özelliklerdi veya Oracle JDK 11'den (örn. JNLP) kaldırıldı. .
java 11 2018-09-25
Java (TM) SE Çalışma Zamanı Ortamı 18.9 (derleme 11 + 28)
Java HotSpot (TM) 64 Bit Sunucu VM 18.9 (derleme 11 + 28, karışık mod)
Ve bir OpenJDK 11 yapısı için:
openjdk sürümü "11" 2018-09-25
OpenJDK Çalışma Zamanı Ortamı 18.9 (derleme 11 + 28)
OpenJDK 64 Bit Sunucu VM 18.9 (derleme 11 + 28, karışık mod)
Oracle JDK 11 ve OpenJDK 11 arasında kalan kozmetik ve ambalaj farklılıklarının bir listesi bu blog gönderisinde bulunabilir:
https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later
Kısacası:
Java 11'den büyük bir değişikliğe dönüşün
Oracle, tarihsel “BCL” lisansını açık kaynak koduyla ticari lisans kombinasyonuyla değiştirecek
Güncelleme: 25-Ağustos-2019
daha fazla bilgi için oracle-vs-openjdk
Açık lisans farkının yanı sıra, OpenJDK ve OracleJDK 11 arasındaki en büyük fark kararlılık ve performans güncellemeleridir.
Kaynak: https://www.youtube.com/watch?v=Adv9--6IcQI&t=385
Her 6 ayda bir iki kod tabanı senkronize olacaktır. Ancak 6 aylık pencere boyunca OpenJDK yalnızca güvenlik güncellemeleri alırken OracleJDK ek kararlılık ve performans güncellemeleri alacak.
Güncelleme sürümlerinin hem OpenJDK hem de OracleJDK için yalnızca 3 ayda bir gerçekleştiği göz önüne alındığında, bir sonraki büyük sürüm çıkana ve yükseltme yapana kadar (en fazla) 3 aylık düzeltmeleri kaçırdığınız anlamına gelir. Ancak, LTS sürümlerine bağlı kalmayı seçerseniz, ticari bir lisans daha anlamlı olmaya başlar.
Ayrıca için Java 8 bir reaktif (engellenmeyen) için ilginç performans kriter Bahar Boot DİNLENME uygulama Nov 2018 yılında yayımlanmıştır AMIS Teknoloji Blog tarafından çeşitli JVM'lerle barındırılan diğer farklılıklar arasında, yani gösterilen:
Ayrıntılar için lütfen kaynak makaleye bakın.
Tabii ki YMMV, bu sadece kriterlerden biri.
Anladığım kadarıyla Oracle JDK üretimde kullanılamıyor, bu nedenle şirketim için geliştirdiğim web uygulaması için yasal olarak (ödemeden) kullanamıyorum. OpenJDK kullanmak zorundayım. Yanlışım varsa lütfen düzelt! Gönderen bu makalede .
Java 11'den başlayarak, Oracle JDK geliştirme ve test ortamlarıyla sınırlıdır. Oracle JDK'lar yalnızca ticari destek satın alırsanız üretimde kullanılabilir. Bunun yerine Oracle, üretimde kullanılabilecek OpenJDK tabanlı Java yapılarını ücretsiz olarak sağlayacaktır. Ancak resmi Oracle JDK için gerçek yol haritası şöyle görünecek:
GÜNCELLEME: Yanılıyorum. Oracle JDK'yı ücretsiz olarak kullanabilirim, ancak 6 mos sonra güvenlik güncellemeleri almayacağım ve riski üstlenmemiz gerekecek. Yukarıdaki "Yeni sürüm treni şirketim için ne anlama geliyor?" Başlıklı makaleye bakın.