नोट: यह प्रश्न 2014 से है। जावा 11 के रूप में OpenJDK और Oracle JDK अभिसरण कर रहे हैं।
Oracle और OpenJDK के बीच कोई महत्वपूर्ण अंतर हैं?
उदाहरण के लिए, कचरा संग्रहण और अन्य जेवीएम पैरामीटर समान हैं?
क्या जीसी दोनों के बीच अलग-अलग काम करता है?
नोट: यह प्रश्न 2014 से है। जावा 11 के रूप में OpenJDK और Oracle JDK अभिसरण कर रहे हैं।
Oracle और OpenJDK के बीच कोई महत्वपूर्ण अंतर हैं?
उदाहरण के लिए, कचरा संग्रहण और अन्य जेवीएम पैरामीटर समान हैं?
क्या जीसी दोनों के बीच अलग-अलग काम करता है?
जवाबों:
OpenJDK और Oracle JDK दोनों ही वर्तमान में Oracle द्वारा ही बनाए और बनाए गए हैं।
OpenJDK और Oracle JDK एक ही जावा विनिर्देशन के कार्यान्वयन हैं जो TCK (जावा प्रौद्योगिकी प्रमाणन किट) से गुजरे हैं।
JDK के अधिकांश विक्रेताओं को OpenJDK के शीर्ष पर लिखा जाता है, जिसमें कुछ ट्वीक किए जाते हैं [ज्यादातर लाइसेंस प्राप्त मालिकाना भागों को बदलने के लिए / अधिक उच्च-प्रदर्शन वस्तुओं के साथ प्रतिस्थापित करने के लिए जो केवल विशिष्ट OS पर काम करते हैं] TCK संगतता को तोड़ने के बिना घटक।
कई विक्रेताओं ने जावा विनिर्देश लागू किया और टीसीके पास किया। उदाहरण के लिए, IBM J9, Azul Zulu, Azul Zing, और Oracle JDK।
लगभग हर मौजूदा JDK OpenJDK से लिया गया है।
जैसा कि कई ने सुझाव दिया है, लाइसेंसिंग जेडीके के बीच एक बदलाव है।
JDK 11 के साथ शुरू करने से Oracle JDK / Java SE को लंबे समय तक सपोर्ट करने के लिए अब कमर्शियल लाइसेंस की आवश्यकता होगी। अब आपको ध्यान देना चाहिए कि जिस JDK को आप Oracle JDK के रूप में स्थापित कर रहे हैं, बिना सदस्यता के काम करना बंद कर सकता है। स्रोत
के लिए जावा 7 , महत्वपूर्ण कुछ भी नहीं है। OpenJDK परियोजना ज्यादातर सन द्वारा दान किए गए हॉटस्पॉट स्रोत कोड पर आधारित है।
इसके अलावा, OpenJDK को जावा 7 के लिए संदर्भ कार्यान्वयन के लिए चुना गया था और इसे ओरेकल इंजीनियरों द्वारा बनाए रखा गया है।
JVM, JDK, JRE और OpenJDK के बीच अंतर पर 2012 से अधिक विस्तृत उत्तर है , जो एक Oracle ब्लॉग पोस्ट से लिंक है :
प्रश्न : OpenJDK रिपॉजिटरी में पाए जाने वाले सोर्स कोड और ओरेकल जेडडीके बनाने के लिए आपके द्वारा उपयोग किए जाने वाले कोड में क्या अंतर है?
एक : यह बहुत करीब है - ओरेकल JDK रिलीज़ के लिए हमारी बिल्ड प्रक्रिया OpenJDK 7 पर तैनाती कोड की तरह, केवल कुछ टुकड़ों को जोड़कर बनाता है, जिसमें ओरेकल का जावा प्लगिन और जावा वेबस्टार्ट का कार्यान्वयन शामिल है, साथ ही कुछ बंद स्रोत तीसरा भी है। ग्राफिक्स रेस्टराइज़र की तरह पार्टी घटक, कुछ खुले स्रोत तीसरे पक्ष के घटक, जैसे राइनो, और कुछ बिट्स और टुकड़े यहाँ और अतिरिक्त दस्तावेज़ या तीसरे पक्ष के फोंट की तरह। आगे बढ़ते हुए, हमारा इरादा Oracle JDK के सभी टुकड़ों को खोलने का है, सिवाय इसके कि हम वाणिज्यिक सुविधाओं जैसे कि JRockit Mission Control (अभी तक Oracle JDK में उपलब्ध नहीं हैं) पर विचार करें, और निकट समता प्राप्त करने के लिए खुले स्रोत के विकल्प के साथ तीसरे पक्ष के घटकों को बदलें। कोड आधारों के बीच।
आगे बढ़ने वाला एक महत्वपूर्ण अंतर रिलीज शेड्यूल और समर्थन नीति है।
OpenJDK में हर 6 महीने में एक फीचर रिलीज़ होगा जो केवल अगले फीचर रिलीज़ होने तक समर्थित है। यह अनिवार्य रूप से डेवलपर्स को लक्षित रिलीज की एक सतत स्ट्रीम है।
ओरेकल JDK एक उद्यम दर्शकों की ओर अधिक लक्षित होता है जो स्थिरता को महत्व देता है। यह OpenJDK रिलीज़ में से एक पर आधारित है लेकिन फिर इसे दीर्घकालिक समर्थन (LTS) दिया जाता है। ओरेकल JDK ने हर 3 साल में योजना बनाई है।
के लिए जावा 8 , ओरेकल JDK बनाम OpenJDK महत्वपूर्ण अंतर लेने के लिए अपनी:
OpenJDK ओरेकल और खुले जावा समुदाय के योगदान के साथ जावा मानक संस्करण मंच का एक खुला स्रोत कार्यान्वयन है।
OpenJDK को लाइसेंस GPL v2 के तहत जारी किया गया है, जिसमें Oracle JDK को Oracle बाइनरी कोड लाइसेंस समझौते के तहत लाइसेंस दिया गया है।
दरअसल, Oracle JDK की निर्माण प्रक्रिया OpenJDK स्रोत कोड से बनती है। इसलिए Oracle JDK और OpenJDK के बीच कोई बड़ा तकनीकी अंतर नहीं है। बेस कोड के अलावा, ओरेकल जेडडीके में ओरेकल के जावा प्लगइन और जावा वेबस्टार्ट के कार्यान्वयन शामिल हैं। इसमें क्रमशः थर्ड-पार्टी क्लोज्ड सोर्स और ओपन सोर्स कंपोनेंट्स जैसे ग्राफिक्स रेस्टराइज़र और राइनो भी शामिल हैं। OpenJDK फ़ॉन्ट रेंडरर और Oracle JDK फ़्लाइट रिकॉर्डर Oracle JDK और OpenJDK के बीच ध्यान देने योग्य प्रमुख अंतर हैं।
मतभेदों की पूरी सूची के लिए कृपया स्रोत लेख देखें: Oracle JDK बनाम OpenJDK और Java JDK विकास प्रक्रिया
Oracle और OpenJDK JVM समान हैं और इनमें GC सुविधाएँ (नवीनतम संस्करण 10+ के समान) हैं। ओरेकल को ओपनजेडकेवी जेवीएम का प्रबंधन करने से पहले ठोस मतभेद थे जिन्होंने उस पुराने ओपनजेक जेवीएम को कई वातावरणों में लगभग अनुपयोगी बना दिया था। जेवीएम अब वही हैं।
JDK जिसमें किट के हिस्से के रूप में JVM शामिल है, लाइसेंसिंग, रिलीज़ और रखरखाव शेड्यूल और JDK में शामिल सॉफ़्टवेयर लाइब्रेरी द्वारा अलग है। मेरे लिए महत्वपूर्ण अंतर का मतलब उन चीजों से भी है जो कोड को नहीं चलाती हैं यदि मौजूद नहीं हैं। लाइसेंस ही नहीं।
diff --brief -r openjdk oraclejdk
महत्वपूर्ण रूप से निम्नलिखित फाइलें लिनक्स JDK पर दूसरों के एक समूह के अलावा गायब हैं (इसलिए यदि आपने 'दावा' किया कि कोड OpenJDK पर काम नहीं करता है और OracleJDK पर ऐसा किया है जब आप javafx का उपयोग कर रहे थे तब आप सही थे):
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 JDK जावा 11 और बाद के लिए जारी करता है
जावा 11 से शुरू होकर, ओरेकल जेडपीके रिलीज़ को ओपन सोर्स जीएनयू जनरल पब्लिक लाइसेंस v2 के तहत प्रदान करेगा , क्लासपैथ अपवाद (GPLv2 + CPE) के साथ , और Oracle उत्पाद या सेवा के हिस्से के रूप में Oracle JDK का उपयोग करने वालों के लिए एक वाणिज्यिक लाइसेंस के तहत, या जो ओपन सोर्स सॉफ्टवेयर का उपयोग नहीं करना चाहते हैं। एक ओपन सोर्स लाइसेंस और एक वाणिज्यिक लाइसेंस का उपयोग करने का यह संयोजन ऐतिहासिक " बीसीएल " लाइसेंस की जगह लेता है , जिसमें मुफ्त और भुगतान किए गए वाणिज्यिक शब्द थे।
प्रत्येक लाइसेंस के लिए अलग-अलग बिल्ड प्रदान किए जाएंगे, लेकिन ये बिल्ड कार्यात्मक रूप से कुछ कॉस्मेटिक और पैकेजिंग अंतरों से अलग हैं, जो नीचे वर्णित हैं।
BCL से GPL तक
ओरेकल जावा SE प्रौद्योगिकियों ( "बीसीएल") के लिए बाइनरी कोड लाइसेंस एक अच्छी तरह से अधिक एक दशक के लिए Oracle जावा SE प्रौद्योगिकियों के लिए प्राथमिक लाइसेंस दिया गया है। बीसीएल परमिट कुछ शर्तों के तहत लाइसेंस फीस के बिना उपयोग करता है। आगे बढ़ने वाली चीजों को सरल बनाने के लिए, ओरेकल ने एक ही लाइसेंस मॉडल का उपयोग करते हुए Java 9 के रूप में OpenJDK लाइसेंस प्राप्त ओपन सोर्स लाइसेंस प्रदान करना शुरू कर दिया । यदि आपको ओरेकल जावा एसई बायनेरी मुफ्त में प्राप्त करने के लिए उपयोग किया जाता है, तो आप बस ओरेकल के ओपनजेडके बिल्ड के साथ jdk.java.net पर उपलब्ध कर सकते हैं । यदि आपको ओरेकल जावा एसई बायनेरी को एक वाणिज्यिक उत्पाद या सेवा से ओरेकल के हिस्से के रूप में प्राप्त करने के लिए उपयोग किया जाता है, तो आप माई ओरेकल सपोर्ट (एमओएस), और अन्य स्थानों के माध्यम से ओरेकल जेडडीके रिलीज प्राप्त करना जारी रख सकते हैं ।
कार्यात्मक रूप से समान और विनिमेय ...
ओरेकल के बीसीएल-लाइसेंस वाले जेडीके में ऐतिहासिक रूप से "वाणिज्यिक विशेषताएं" शामिल थीं जो ओपनजेडके बिल्ड में उपलब्ध नहीं थीं। जैसा कि वादा किया गया था , हालांकि, पिछले एक साल में ओरेकल ने ओपनजेडकेके समुदाय में इन सुविधाओं का योगदान दिया है, जिनमें शामिल हैं:
जावा 11 से आगे, इसलिए, Oracle JDK बिल्ड और OpenJDK बिल्ड अनिवार्य रूप से समान होंगे।
... अभी तक कुछ कॉस्मेटिक और पैकेजिंग अंतर के साथ
मतभेद, कुछ जानबूझकर और कॉस्मेटिक, और कुछ बस इसलिए रहते हैं क्योंकि OpenJDK योगदानकर्ताओं के साथ चर्चा करने के लिए अधिक समय चेतावनी दी जाती है।
विशिष्ट प्रकार की विरासत के उपयोग के लिए एक सुसंगत अनुभव प्रदान करने के लिए यह अंतर बना रहता है। ये मॉड्यूल या तो अब OpenJFX के हिस्से के रूप में अलग-अलग उपलब्ध हैं, अब OpenJDK और Oracle JDK दोनों में हैं क्योंकि वे व्यावसायिक विशेषताएं थीं, जो Oracle ने OpenJDK (जैसे, फ्लाइट रिकॉर्डर) में योगदान दिया था, या Oracle JDK 11 (जैसे, JNLP) से हटा दिया गया था ।
जावा ११ २०१ 201-०९ -२५
जावा (TM) एसई रनटाइम एनवायरनमेंट 18.9 (बिल्ड 11 + 28)
जावा हॉटस्पॉट (टीएम) 64-बिट सर्वर वीएम 18.9 (बिल्ड 11 + 28, मिश्रित मोड)
और एक OpenJDK 11 बिल्ड के लिए:
Openjdk संस्करण "11" 2018-09-25
ओपनजेडके रनटाइम एनवायरनमेंट 18.9 (बिल्ड 11 + 28)
OpenJDK 64-बिट सर्वर VM 18.9 (बिल्ड 11 + 28, मिश्रित मोड)
Oracle JDK 11 और OpenJDK 11 के बीच कुछ शेष कॉस्मेटिक और पैकेजिंग अंतर की एक सूची इस ब्लॉग पोस्ट में पाई जा सकती है:
https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later
संक्षेप में:
जावा 11 से एक बड़े बदलाव की ओर
ओरेकल एक खुले स्रोत और वाणिज्यिक लाइसेंस के संयोजन के साथ अपने ऐतिहासिक "बीसीएल" लाइसेंस को बदल देगा
अपडेट: २५-अगस्त -२०१ ९
अधिक विवरण के लिए oracle-vs-openjdk
स्पष्ट लाइसेंसिंग अंतर के अलावा, OpenJDK और OracleJDK 11 के बीच प्रमुख अंतर स्थिरता और प्रदर्शन अपडेट हैं।
स्रोत: https://www.youtube.com/watch?v=Adv9--6IcQI&t=385
हर 6 महीने में दो कोडबेस सिंक में होंगे। लेकिन 6 महीने की खिड़की के दौरान ओपनजेडके केवल सुरक्षा अपडेट प्राप्त करेगा, जबकि ओरेकलजेडके अतिरिक्त स्थिरता और प्रदर्शन अपडेट प्राप्त करेगा।
यह देखते हुए कि अपडेट रिलीज़ केवल OpenJDK और OracleJDK दोनों के लिए हर 3 महीने में होती है, इसका मतलब है कि आप अगले महीने जारी होने तक अधिकतम 3 महीने के फ़िक्सेस को याद कर रहे हैं। हालांकि, यदि आप एलटीएस रिलीज से चिपके रहना चुनते हैं तो एक वाणिज्यिक लाइसेंस अधिक समझ में आने लगता है।
जावा 8 के लिए भी एएमआईएस प्रौद्योगिकी ब्लॉग द्वारा विभिन्न जेवीएम पर होस्ट किए जा रहे प्रतिक्रियाशील (गैर-अवरोधक) स्प्रिंग बूट रीस्ट एप्लिकेशन के लिए एक दिलचस्प प्रदर्शन बेंचमार्क नवंबर 2018 में प्रकाशित किया गया है, जो दिखा रहा है कि अन्य मतभेदों के बीच:
जानकारी के लिए कृपया स्रोत लेख देखें।
बेशक YMMV, यह बेंचमार्क में से एक है।
मेरी समझ यह है कि Oracle JDK का उपयोग उत्पादन में नहीं किया जा सकता है, इसलिए मैं अपनी कंपनी के लिए जो वेब एप्लिकेशन बना रहा हूं, उसके लिए मैं कानूनी रूप से (भुगतान किए बिना) इसका उपयोग नहीं कर सकता। मुझे OpenJDK का उपयोग करना है। अगर मैं गलत हूं कृपया मुझे सही! से इस लेख ।
जावा 11 के साथ शुरू, ओरेकल JDK विकास और परीक्षण वातावरण तक ही सीमित है। यदि आप वाणिज्यिक सहायता खरीदते हैं तो Oracle JDK का उपयोग केवल उत्पादन में किया जा सकता है। इसके बजाय, ओरेकल OpenJDK पर आधारित जावा बिल्ड मुफ्त में प्रदान करेगा जिसका उपयोग उत्पादन में किया जा सकता है। लेकिन आधिकारिक ओरेकल JDK के लिए असली रोडमैप इस तरह दिखाई देगा:
अद्यतन: मैं गलत हूँ। मैं Oracle JDK का मुफ्त में उपयोग कर सकता हूं, लेकिन 6 राज्य के बाद सुरक्षा अपडेट नहीं मिलेगा और हमें जोखिम उठाना पड़ेगा। उपरोक्त लिंक लेख अनुभाग को देखें "नई रिलीज़ ट्रेन का मेरी कंपनी के लिए क्या मतलब है?"।