ความแตกต่างระหว่าง Oracle JDK และ OpenJDK


700

หมายเหตุ: คำถามนี้มาจากปี 2014 ตั้งแต่ Java 11 OpenJDK และ Oracle JDK กำลังมาบรรจบกัน

มีความแตกต่างที่สำคัญระหว่าง Oracle และ OpenJDK หรือไม่?

ตัวอย่างเช่นการรวบรวมขยะและพารามิเตอร์ JVM อื่น ๆ เหมือนกันหรือไม่

GC ทำงานแตกต่างกันระหว่างสองแบบนี้หรือไม่


3
สิ่งนี้อาจมีความเกี่ยวข้องหากคุณวางแผนที่จะย้ายจาก Oracle ไปยัง OpenJDK เนื่องจาก Oracle ไม่ว่างอีกต่อไป developers.redhat.com/blog/2018/11/05/…
Leo Ufimtsev

คำตอบ:


338

ทั้ง OpenJDK และ Oracle JDK นั้นสร้างและดูแลโดย Oracle เท่านั้นในปัจจุบัน

OpenJDK และ Oracle JDK เป็นการนำไปปฏิบัติของสเปค Java เดียวกันผ่าน TCK (Java Technology Certification Kit)

ผู้ขายส่วนใหญ่ของ JDK นั้นเขียนอยู่ด้านบนของ OpenJDK โดยทำการปรับแต่งสองสามส่วนเพื่อแทนที่ส่วนที่เป็นลิขสิทธิ์ที่มีลิขสิทธิ์ / แทนที่ด้วยรายการที่มีประสิทธิภาพสูงกว่าซึ่งทำงานเฉพาะกับระบบปฏิบัติการที่เฉพาะเจาะจงเท่านั้น

ผู้ค้าจำนวนมากใช้ข้อกำหนดของ Java และได้รับ TCK ผ่าน ตัวอย่างเช่น IBM J9, Azul Zulu, Azul Zing และ Oracle JDK

เกือบทุก JDK ที่มีอยู่นั้นมาจาก OpenJDK

ตามที่แนะนำโดยหลาย ๆ ใบอนุญาตคือการเปลี่ยนแปลงระหว่าง JDK

เริ่มต้นด้วย JDK 11 การเข้าถึงการสนับสนุนเป็นเวลานาน Oracle JDK / Java SE จะต้องมีใบอนุญาตทางการค้า ตอนนี้คุณควรให้ความสนใจกับ JDK ที่คุณติดตั้งในขณะที่ Oracle JDK โดยไม่ต้องสมัครสมาชิกอาจหยุดทำงาน แหล่ง

Ref: รายการของเครื่องเสมือน Java


13
ดังนั้นคุณบอกว่า openjdk เป็นพื้นฐานสำหรับ jdks อื่น ๆ ทั้งหมดที่พวกเขาคัดลอกแล้วบิดหลังจากคุณสมบัติของตัวเอง?
K - ความเป็นพิษใน SO กำลังเพิ่มขึ้น

24
ฉันไปงานปาร์ตี้สาย แต่ฉันจะถามต่อไป jdk นำอะไรมาสู่ตารางที่ openjdk ทำไม่ได้? คำตอบทั้งหมดเหล่านี้ทำให้ openjdk ดูเหมือนว่าจะเท่ากับหรือเหนือกว่าในทุก ๆ ด้าน แต่ถ้าเป็นเช่นนั้นเหตุใดออราเคิลถึงยังต้องบำรุงรักษา jdk ด้วยซ้ำ
Kefka

@ Karl Morrison เท่าที่ฉันรู้ .. ทุกคนที่ใช้ JVM spec ทำแบบนั้นเท่านั้น .. แต่ไม่มีกฎที่ชัดเจนว่าเราต้องทำตามวิธีนั้น ...
Venkateswara Rao

13
@ Mella OpenJDK <= OracleJDK ตัวอย่างเช่น Oracle JDK มีการตั้งค่าคีย์ที่เชื่อถือได้น้อยซึ่งไม่ได้อยู่ใน OpenJDK (ตอนนี้ผู้คนกำลังนำเข้าเพื่อเติมเต็มช่องว่างนี้) หลายวัน Oracle JDK มีห้องสมุด SWING บางส่วนที่เป็นกรรมสิทธิ์ .. (ใครเคยทำแอปเซิร์ฟเวอร์อาจไม่เกี่ยวข้องสำหรับพวกเขา) Oracle JDK มีปลั๊กอินของ Applet (เหตุผลเดียวกันกับการทำงาน) Oracle JDK แก้ไขข้อผิดพลาด / แก้ไขด่วนจะถูกแจกจ่ายและจัดการอย่างเหมาะสมโดย Oracle โดยที่ OpenJDK เป็นเทคนิคเล็กน้อยเพื่อให้แน่ใจว่า มีการนำแพตช์มาใช้และความขัดแย้งที่พวกเขาจะมี
Venkateswara Rao

หมายเหตุด้วยรูปแบบการเปิดตัวใหม่สำหรับ java, Oracle วางแผนที่จะลดช่องว่างให้มากที่สุดระหว่าง jdk ทั้งสอง มีผู้ให้โอเพนซอร์สอื่น ๆ ที่จะเปิด jdk นอกเหนือจากผู้พัฒนา Oracle หรือไม่? นี่คือการเข้าใจว่าจะมีพอรองรับ backport แก้ไขจากรุ่นล่าสุดเป็นรุ่นก่อนหน้า ความคิดใด ๆ
Andy Dufresne

329

สำหรับJava 7ไม่มีอะไรสำคัญ โครงการ OpenJDK นั้นขึ้นอยู่กับซอร์สโค้ดของHotSpotที่ Sun เป็นผู้บริจาค

นอกจากนี้ OpenJDK ยังได้รับเลือกให้ใช้งานอ้างอิงสำหรับ Java 7และดูแลโดยวิศวกรของ Oracle

มีคำตอบที่ละเอียดยิ่งขึ้นจากปี 2012 ในความแตกต่างระหว่าง JVM, JDK, JRE และ OpenJDKซึ่งเชื่อมโยงไปยังบล็อกโพสต์ของ Oracle :

ถาม : อะไรคือความแตกต่างระหว่างซอร์สโค้ดที่พบในที่เก็บ OpenJDK และรหัสที่คุณใช้ในการสร้าง Oracle JDK

ตอบ : มันใกล้เคียงกันมาก - กระบวนการสร้างของเราสำหรับ Oracle JDK ปล่อยการสร้างบน OpenJDK 7 โดยเพิ่มเพียงไม่กี่ชิ้นเช่นรหัสการปรับใช้ซึ่งรวมถึงการติดตั้ง Java ปลั๊กอินของ Java และ Java WebStart ของออราเคิล ส่วนประกอบของบุคคลเช่นตัวแรสเตอร์กราฟิกส่วนประกอบโอเพ่นซอร์สของบุคคลที่สามบางตัวเช่น Rhino และบิตและชิ้นส่วนเล็กน้อยที่นี่และที่นั่นเช่นเอกสารเพิ่มเติมหรือแบบอักษรของบุคคลที่สาม ความมุ่งมั่นของเราคือการเปิดแหล่งที่มาทุกชิ้นของ Oracle JDK ยกเว้นสิ่งที่เราพิจารณาคุณสมบัติเชิงพาณิชย์เช่น JRockit Mission Control (ยังไม่พร้อมใช้งานใน Oracle JDK) และแทนที่ส่วนประกอบของบุคคลที่สามที่เข้าร่วมด้วยทางเลือกโอเพ่นซอร์ส ระหว่างฐานรหัส


42
ยังมีความแตกต่างของสิทธิ์ใช้งาน
mcoolive

9
ขอบคุณฉันพบคำตอบที่ดีกว่า stackoverflow.com/questions/17360011/…
astroanu

9
บน ARM อย่างน้อยทั้งสองนั้นดูเหมือนจะมีความแตกต่างในประสิทธิภาพ ฉันจะต้องทำโปรไฟล์บางอย่างเกี่ยวกับสาเหตุที่เกิดขึ้น แต่ความแตกต่างเชิงอัตวิสัยคือ "Oracle JDK is ok" และ "OpenJDK ใช้ไม่ได้อย่างสมบูรณ์"
คู่

1
@dualed อย่างไรก็ตาม android กำลังจะย้ายไปที่ openjdk เริ่มต้นจาก android 7. ดูเหมือนว่าพวกเขากำลังเตรียมการปรับปรุงที่สำคัญ capitalbeat.com/2015/12/29/…
Johnny Doe

1
@JohnnyDoe ให้ความหวังว่าหาก google กำลังจะย้ายไปที่ OpenJDK พวกเขาจะจัดหาแพตช์ประสิทธิภาพให้อัปสตรีมเพื่อให้ทำงานได้ดีบน ARM นอก Android เช่นกัน!
คู่

95

ความแตกต่างที่สำคัญในระยะต่อไปคือกำหนดการปล่อยและนโยบายการสนับสนุน

OpenJDK

OpenJDK จะมีการเปิดตัวคุณสมบัติทุก ๆ 6 เดือนซึ่งจะรองรับจนกว่าจะมีการเปิดตัวคุณลักษณะถัดไป มันเป็นกระแสการเผยแพร่อย่างต่อเนื่องที่กำหนดเป้าหมายไปที่นักพัฒนา

Oracle JDK

Oracle JDK มีการกำหนดเป้าหมายไปยังผู้ชมองค์กรที่ให้ความสำคัญกับความมั่นคงมากขึ้น มันขึ้นอยู่กับหนึ่งในรุ่น OpenJDK แต่จะได้รับการสนับสนุนระยะยาว (LTS) Oracle JDK ได้เผยแพร่แผนทุก 3 ปี

ป้อนคำอธิบายรูปภาพที่นี่

ที่มา: https://www.oracle.com/java/java9-screencasts.html?bcid=5582439790001&playerType=single-social&size=events


3
รีลีสระยะยาวคุณต้องซื้อการสนับสนุนเชิงพาณิชย์เพื่อรับการอัปเดตหลังจาก 6 เดือนของการเปิดตัวจาวา อะไรคือความสำคัญของการเปิดตัวระยะยาวเมื่อเทียบกับการวางจำหน่ายระยะสั้น? รุ่นสั้น ๆ เช่น JDK 9/10 ไม่มีการสนับสนุนเชิงพาณิชย์จาก Oracle หรือไม่?
Andy Dufresne

@AndyDufresne ทำไมคุณคิดว่าคุณจะต้องจ่ายค่าสนับสนุนหลังจากผ่านไปเพียง 6 เดือน? ความเข้าใจของฉันคือระยะเวลาคือ TBD 6 เดือนดูเหมือนสั้นมากแม้ว่า ... ฉันสงสัยว่าเราสามารถคาดหวังการอัปเดตสาธารณะเป็นเวลา 5 ปีเช่นเดียวกับ Java 8 ที่ได้รับ แต่ฉันจะไม่แปลกใจถ้ามีการอัปเดตสาธารณะเป็นเวลา 2 หรือ 3 ปี อ้างอิง - นี้เป็นต่อ: oracle.com/technetwork/java/eol-135779.html
Gilbert Arenas Dagger

1
oracle link กล่าวถึง "สำหรับเช่น LTS รีลีสสำหรับ Oracle JDK 11 (18.9 LTS) จะได้รับการสนับสนุนเป็นเวลาอย่างน้อย 5 ปีตามที่อธิบายไว้ในนโยบายการสนับสนุนตลอดชีวิตของ Oracle" นโยบายมีการสนับสนุน 3 ระดับไม่มีนโยบายใดที่ให้ความช่วยเหลือ นอกจากนี้ผมพูดถึงนี้หลังจากที่กำลังมองหาที่ความคิดเห็น Azul CTO ของที่นี่ - blog.takipi.com/java-11-will-include-more-than-just-features/... เป้าหมายหลักของกลยุทธ์การวางจำหน่ายแบบใหม่นี้คือการไม่ใช้เวลาในการบำรุงรักษารุ่นเก่า หากการสนับสนุนนั้นฟรีโมเดลจะเหมือนกับที่เคยเป็นมาจนถึงตอนนี้
Andy Dufresne

38

สำหรับJava 8 , Oracle JDK กับ OpenJDK ความแตกต่างที่สำคัญของฉัน:

  • OpenJDK เป็นการใช้งานโอเพ่นซอร์สของแพลตฟอร์ม Java Standard Edition โดยมีส่วนสนับสนุนจาก Oracle และชุมชน Java แบบเปิด

  • OpenJDK เผยแพร่ภายใต้ใบอนุญาต GPL v2 นั้น Oracle JDK ได้รับอนุญาตภายใต้ข้อตกลงการอนุญาตใช้สิทธิ์ Oracle Binary

  • จริงๆแล้วกระบวนการสร้าง Oracle JDK ของสร้างจากรหัสที่มา OpenJDK ดังนั้นจึงไม่มีความแตกต่างทางเทคนิคที่สำคัญระหว่าง Oracle JDK และ OpenJDK นอกเหนือจากรหัสพื้นฐานแล้ว Oracle JDK ยังรวมถึงการใช้งานจาวาของปลั๊กอิน Java และ Java WebStart นอกจากนี้ยังมีแหล่งข้อมูลปิดของบุคคลที่สามและส่วนประกอบโอเพ่นซอร์สเช่นกราฟิกแรสเตอร์เซอร์และแรดตามลำดับ OpenJDK Font Renderer และ Oracle JDK Flight Recorder เป็นข้อแตกต่างที่เห็นได้ชัดเจนระหว่าง Oracle JDK และ OpenJDK

  • Rockit เป็น JVM ของ Oracle และจาก Java SE 7, HotSpot และ JRockit รวมกันเป็น JVM เดียว ดังนั้นตอนนี้เรามีเฉพาะ HotSpot JVM ที่รวมอยู่
  • มีหลายกรณีที่ผู้คนอ้างว่าพวกเขามีปัญหาในขณะที่ใช้งาน OpenJDK และได้รับการแก้ไขเมื่อเปลี่ยนเป็น Oracle JDK
  • Twitter มี JDK ของตัวเอง
  • ซอฟต์แวร์เช่น Minecraft คาดว่าจะใช้ Oracle JDK ในความเป็นจริงเตือน

สำหรับรายการความแตกต่างแบบเต็มโปรดดูบทความต้นฉบับ: Oracle JDK กับ OpenJDK และกระบวนการพัฒนา Java JDK


4
สำหรับ Android Studio สิ่งนี้ไม่เป็นจริงอีกต่อไป: สำเนาของ OpenJDK ล่าสุดมาพร้อมกับ Android Studio 2.2 และสูงกว่าและนี่คือรุ่น JDK ที่เราแนะนำให้คุณใช้สำหรับโครงการ Android ของคุณ ที่มา: developer.android.com/studio/intro/studio-config#jdk
MKesper

“ ซอฟต์แวร์อย่าง Minecraft คาดว่าจะใช้ Oracle JDK ที่จริงแล้วเตือน” ที่จริงแล้วใน Ubuntu เครื่องมือติดตั้ง. deb อย่างเป็นทางการของ Mojang จะดึงใน OpenJDK เมื่อติดตั้งตัวเรียกใช้งาน
Moilleadóir

29

Oracle และ OpenJDK JVM นั้นเหมือนกันและมีคุณสมบัติ GC เหมือนกัน (ตั้งแต่เวอร์ชันล่าสุด 10+) ก่อนที่ Oracle จะจัดการ OpenJDK JVM มีความแตกต่างที่เป็นรูปธรรมซึ่งทำให้ Openjdk JVM เก่าแทบไม่สามารถใช้งานได้ในหลาย ๆ สภาพแวดล้อม JVMs ตอนนี้เหมือนกัน

JDK ซึ่งรวมถึง JVM ซึ่งเป็นส่วนหนึ่งของ Kit นั้นแตกต่างกันตามกำหนดการออกใบอนุญาตการปล่อยและการบำรุงรักษาและไลบรารีซอฟต์แวร์ที่รวมอยู่ใน JDK ความแตกต่างที่สำคัญสำหรับฉันยังหมายถึงสิ่งต่าง ๆ ที่ทำให้โค้ดไม่ทำงานหากไม่มีอยู่ การออกใบอนุญาตไม่เพียง

diff --brief -r openjdk oraclejdk

ที่สำคัญไฟล์ต่อไปนี้จะหายไปนอกจากกลุ่มอื่น ๆ บน linux 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`

5
ขอบคุณที่ชี้ไปที่ความแตกต่างที่แท้จริง : รหัสที่ไม่ทำงานเป็นเรื่องจริง จากฐานของคุณdiffอยู่ที่ไหน
Matthieu

19

ตามบล็อกของOracle , Oracle JDK Release สำหรับ Java 11 และใหม่กว่า

เริ่มต้นด้วย Java 11, Oracle จะให้บริการ JDK ภายใต้สัญญาอนุญาตสาธารณะทั่วไปของ open source GNU v2 พร้อมด้วย Classpath Exception (GPLv2 + CPE)และภายใต้สัญญาอนุญาตเชิงพาณิชย์สำหรับผู้ที่ใช้ Oracle JDK เป็นส่วนหนึ่งของผลิตภัณฑ์หรือบริการของ Oracle หรือผู้ที่ไม่ต้องการใช้ซอฟต์แวร์โอเพ่นซอร์ส การรวมกันของการใช้ใบอนุญาตโอเพนซอร์ซและใบอนุญาตการค้านี้แทนใบอนุญาต“ BCL ” อันเก่าแก่ซึ่งมีการผสมผสานระหว่างข้อกำหนดเชิงพาณิชย์ทั้งแบบฟรีและมีค่าใช้จ่าย

บิวด์ที่แตกต่างกันจะมีให้สำหรับแต่ละสิทธิการใช้งาน แต่บิลด์เหล่านี้มีหน้าที่เหมือนกันนอกเหนือจากความแตกต่างเครื่องสำอางและบรรจุภัณฑ์

จาก BCL ไปยัง GPL

ใบอนุญาต Binary รหัสสำหรับเทคโนโลยีของ Oracle Java SE (“BCL”)ได้รับใบอนุญาตหลักสำหรับเทคโนโลยีของ Oracle Java SE สำหรับดีกว่าทศวรรษที่ผ่านมา BCL อนุญาตให้ใช้โดยไม่มีค่าธรรมเนียมใบอนุญาตภายใต้เงื่อนไขบางประการ เพื่อลดความซับซ้อนของสิ่งต่าง ๆ ออราเคิลเริ่มให้โอเพ่นซอร์สลิขสิทธิ์ OpenJDK บิลด์ของ Java 9 โดยใช้โมเดลลิขสิทธิ์แบบเดียวกับแพลตฟอร์ม Linux หากคุณกำลังใช้ในการรับไบนารีของ Oracle Java SE ฟรีคุณก็ยังคงสามารถทำเช่นนั้นกับของออราเคิล OpenJDK สร้างที่มีอยู่ในjdk.java.net หากคุณคุ้นเคยกับการรับ Oracle Java SE ไบนารีเป็นส่วนหนึ่งของผลิตภัณฑ์เชิงพาณิชย์หรือบริการจาก Oracle คุณสามารถดำเนินการเผยแพร่ Oracle JDK ผ่านMy Oracle Support (MOS) และตำแหน่งอื่น ๆ

ทำหน้าที่เหมือนกันและเปลี่ยนได้ ...

Oracle JDK ที่ได้รับอนุญาต BCL ของออราเคิลในอดีตมี“ คุณสมบัติเชิงพาณิชย์” ที่ไม่สามารถใช้งานได้ใน OpenJDK builds อย่างไรก็ตามในปีที่ผ่านมาออราเคิลได้ให้การสนับสนุนคุณสมบัติเหล่านี้แก่ชุมชน OpenJDK ตามที่สัญญาไว้รวมถึง:

จาก Java 11 ไปข้างหน้า Oracle JDK builds และOpenJDK buildsจะเหมือนกันโดยพื้นฐาน

... ยังมีความแตกต่างของเครื่องสำอางและบรรจุภัณฑ์

ยังคงมีความแตกต่างอยู่เล็กน้อยความตั้งใจและความงามและบางอย่างก็เพราะเวลามากขึ้นที่จะพูดคุยกับผู้สนับสนุนของ OpenJDK

  • Oracle JDK 11 ส่งเสียงเตือนเมื่อใช้ตัวเลือก -XX: + UnlockCommercialFeatures ในขณะที่ OpenJDK สร้างตัวเลือกนี้จะทำให้เกิดข้อผิดพลาด ตัวเลือกนี้ไม่เคยเป็นส่วนหนึ่งของ OpenJDK และจะไม่เหมาะสมที่จะเพิ่มในตอนนี้เนื่องจากไม่มีคุณสมบัติเชิงพาณิชย์ใน OpenJDK ความแตกต่างนี้ยังคงอยู่เพื่อให้ง่ายขึ้นสำหรับผู้ใช้ Oracle JDK 10 และรุ่นก่อนหน้าเพื่อโยกย้ายไปยัง Oracle JDK 11 และใหม่กว่า
  • สามารถกำหนดค่า Oracle JDK 11 เพื่อให้ข้อมูลบันทึกการใช้งานกับเครื่องมือ“ Advanced Management Console ” ซึ่งเป็นผลิตภัณฑ์ Oracle เชิงพาณิชย์แยกต่างหาก เราจะทำงานร่วมกับผู้มีส่วนร่วม OpenJDK รายอื่นเพื่อหารือเกี่ยวกับวิธีการใช้ข้อมูลดังกล่าวอาจเป็นประโยชน์ใน OpenJDK ในอนาคตได้อย่างไร ความแตกต่างนี้ยังคงเป็นหลักเพื่อให้ประสบการณ์ที่สอดคล้องกับลูกค้า Oracle จนกว่าจะทำการตัดสินใจ
  • คำสั่ง javac --release จะทำงานแตกต่างกันสำหรับเป้าหมาย Java 9 และ Java 10 เนื่องจากในรีลีสนั้น Oracle JDK มีโมดูลเพิ่มเติมบางอย่างที่ไม่ได้เป็นส่วนหนึ่งของการเผยแพร่ 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

ความแตกต่างนี้ยังคงเพื่อมอบประสบการณ์ที่สอดคล้องสำหรับการใช้งานแบบเฉพาะ ขณะนี้โมดูลเหล่านี้มีให้แยกต่างหากเป็นส่วนหนึ่งของOpenJFXขณะนี้มีทั้งใน OpenJDK และ Oracle JDK เพราะเป็นคุณสมบัติเชิงพาณิชย์ที่ Oracle สนับสนุน OpenJDK (เช่น Flight Recorder) หรือถูกลบออกจาก Oracle JDK 11 (เช่น JNLP) .

  • เอาต์พุตของคำสั่ง java --version และ java -fullversion จะแยกแยะ Oracle JDK บิลด์จาก OpenJDK บิลด์เพื่อให้ทีมสนับสนุนสามารถวิเคราะห์ปัญหาที่อาจเกิดขึ้นได้ โดยเฉพาะการรัน java --version ด้วย Oracle JDK 11 บิลด์ผลลัพธ์ใน:

java 11 2018-09-25

สภาพแวดล้อมรันไทม์ Java (TM) SE 18.9 (รุ่น 11 + 28)

เซิร์ฟเวอร์ Java HotSpot (TM) 64- บิต VM 18.9 (สร้าง 11 + 28, โหมดผสม)

และสำหรับบิวด์ OpenJDK 11:

openjdk รุ่น "11" 2018-09-25

OpenJDK Runtime Environment 18.9 (รุ่น 11 + 28)

เซิร์ฟเวอร์ OpenJDK 64- บิต VM 18.9 (สร้าง 11 + 28, โหมดผสม)

  • Oracle JDK นั้นต้องการผู้ให้บริการการเข้ารหัสบุคคลที่สามเสมอที่จะลงนามโดยใบรับรองที่รู้จัก เฟรมเวิร์กการเข้ารหัสใน OpenJDK มีอินเทอร์เฟซการเข้ารหัสแบบเปิดหมายความว่ามันจะไม่ จำกัด ผู้ให้บริการที่สามารถใช้ได้ Oracle JDK 11 จะยังคงต้องการลายเซ็นที่ถูกต้องและ Oracle OpenJDK บิลด์จะยังคงอนุญาตให้ใช้ลายเซ็นที่ถูกต้องหรือผู้ให้บริการเข้ารหัสลับของบุคคลที่สามที่ไม่ได้ลงชื่อ
  • Oracle JDK 11 จะยังคงรวมตัวติดตั้งการสร้างแบรนด์และบรรจุภัณฑ์ JRE สำหรับประสบการณ์ที่สอดคล้องกับการใช้เดสก์ท็อปรุ่นเก่า ขณะนี้ Oracle OpenJDK builds พร้อมใช้งานในรูปแบบไฟล์ zip และ tar.gz ขณะที่กำลังพิจารณารูปแบบการแจกจ่ายอื่น

10

รายการความแตกต่างเครื่องสำอางและบรรจุภัณฑ์ที่เหลืออยู่เล็กน้อยระหว่าง Oracle JDK 11 และ OpenJDK 11 สามารถพบได้ในโพสต์บล็อกนี้:

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

ในระยะสั้น:

  • Oracle JDK 11 ส่งเสียงเตือนเมื่อใช้ตัวเลือก -XX: + UnlockCommercialFeatures
  • สามารถกำหนดค่าให้ข้อมูลบันทึกการใช้ไปยังเครื่องมือ“ Advanced Management Console”
  • มันต้องการผู้ให้บริการเข้ารหัสลับของบุคคลที่สามเสมอที่จะลงนามโดยใบรับรองที่รู้จัก
  • มันจะยังคงรวมตัวติดตั้งการสร้างแบรนด์และบรรจุภัณฑ์ JRE
  • ในขณะที่คำสั่ง javac --release จะทำงานแตกต่างกันเล็กน้อยสำหรับเป้าหมาย Java 9 และ Java 10 และ
  • เอาต์พุตของคำสั่ง java --version และ java -fullversion จะแยกแยะ Oracle JDK บิลด์จาก OpenJDK บิลด์

2
ฉันสังเกตเห็นว่าคำตอบส่วนใหญ่ของคุณมีลายเซ็นในนั้น ฉันแก้ไขมันหมดแล้ว โปรดอ่านแท็กไลน์และลายเซ็นไม่ได้รับอนุญาตหรือไม่? และstackoverflow.com/help/behavior (เฉพาะหมวด "อย่าใช้ลายเซ็นแท็กไลน์หรือคำทักทาย")
Mark Rotteveel

7
  1. Oracle จะส่งมอบทุก ๆ สามปีในขณะที่ OpenJDK จะออกทุกหกเดือน
  2. Oracle ให้การสนับสนุนระยะยาวสำหรับรุ่นต่างๆ ในทางกลับกัน OpenJDK รองรับการเปลี่ยนแปลงในรีลีสเท่านั้นจนกว่าจะมีการเปิดตัวเวอร์ชันถัดไป
  3. Oracle JDK ได้รับใบอนุญาตภายใต้ข้อตกลงใบอนุญาตใช้รหัสของ Oracle Binary ในขณะที่ OpenJDK มี GNU General Public License (GNU GPL) เวอร์ชั่น 2 พร้อมข้อยกเว้นการเชื่อมโยง
  4. ผลิตภัณฑ์ของออราเคิลมี Flight Recorder, Java Mission Control และฟีเจอร์การแชร์ข้อมูลระดับแอปพลิเคชันขณะที่ OpenJDK มีคุณสมบัติ Font Renderer นอกจากนี้ Oracle ยังมีตัวเลือก Garbage Collection และตัวแสดงภาพที่ดีกว่า
  5. Oracle JDK ได้รับการพัฒนาอย่างเต็มที่โดย Oracle Corporation ในขณะที่ OpenJDK ได้รับการพัฒนาโดย Oracle, OpenJDK และชุมชน Java อย่างไรก็ตาม บริษัท ชั้นนำอย่าง Red Hat, Azul Systems, IBM, Apple Inc. และ SAP AG ก็มีส่วนร่วมในการพัฒนาเช่นกัน

จาก Java 11 เปลี่ยนเป็นการเปลี่ยนแปลงครั้งใหญ่

ออราเคิลจะเปลี่ยนใบอนุญาต“ BCL” ที่ผ่านมาด้วยการผสมผสานระหว่างโอเพ่นซอร์สและใบอนุญาตการค้า

  • ชุดของ Oracle สำหรับ Java 11 ส่งเสียงเตือนเมื่อใช้ตัวเลือก -XX: + UnlockCommercialFeatures ในขณะที่ใน OpenJDK builds ตัวเลือกนี้จะทำให้เกิดข้อผิดพลาด
  • Oracle JDK เสนอการกำหนดค่าเพื่อให้ข้อมูลบันทึกการใช้ไปยังเครื่องมือ“ Advanced Management Console”
  • ออราเคิลต้องการให้ผู้ให้บริการเข้ารหัสลับของบุคคลที่สามลงนามโดยใบรับรองที่รู้จักเสมอในขณะที่กรอบการเข้ารหัสใน OpenJDK มีอินเทอร์เฟซการเข้ารหัสลับแบบเปิดซึ่งหมายความว่าไม่มีข้อ จำกัด ใด ๆ
  • Oracle JDK 11 จะยังคงรวมตัวติดตั้งการสร้างแบรนด์และบรรจุภัณฑ์ JRE ในขณะที่บิวด์ OpenJDK สามารถใช้งานได้ในปัจจุบันเป็นไฟล์ zip และ tar.gz
  • คำสั่ง javac –release จะทำงานแตกต่างกันสำหรับเป้าหมาย Java 9 และ Java 10 เนื่องจากมีโมดูลเพิ่มเติมบางอย่างในรีลีสของ Oracle
  • เอาต์พุตของคำสั่ง java –version และ java -fullversion จะแยกแยะการสร้างของ Oracle จาก OpenJDK builds


อัปเดต: 25-Aug-2019



ป้อนคำอธิบายรูปภาพที่นี่

สำหรับรายละเอียดเพิ่มเติมoracle-vs-openjdk



5

นอกเหนือจากความแตกต่างของสิทธิ์ใช้งานที่ชัดเจนความแตกต่างที่สำคัญระหว่าง OpenJDK และ OracleJDK 11 คือความเสถียรและการปรับปรุงประสิทธิภาพ

ที่มา: https://www.youtube.com/watch?v=Adv9--6IcQI&t=385

ทุกๆ 6 เดือนฐานสองโค้ดจะซิงค์กัน แต่ในช่วง 6 เดือนที่หน้าต่าง OpenJDK จะได้รับการอัพเดตความปลอดภัยเท่านั้นขณะที่ OracleJDK จะได้รับการอัปเดตความเสถียรและประสิทธิภาพเพิ่มเติม

เนื่องจากการเปิดตัวการอัพเดทจะเกิดขึ้นทุก 3 เดือนสำหรับทั้ง OpenJDK และ OracleJDK ซึ่งหมายความว่าคุณจะพลาดการแก้ไข (อย่างมาก) มูลค่า 3 เดือนจนกว่าจะมีการออกรุ่นใหญ่ครั้งต่อไปและคุณอัพเกรด อย่างไรก็ตามหากคุณเลือกที่จะยึดติดกับการเผยแพร่ LTS ใบอนุญาตการค้าก็เริ่มมีความหมายมากขึ้น


3

สำหรับJava 8ยังเป็นเกณฑ์มาตรฐานประสิทธิภาพที่น่าสนใจสำหรับแอพพลิเคชั่น Spring Boot REST แบบปฏิกิริยา (ไม่ปิดกั้น) ที่โฮสต์บน JVMs ต่างๆโดย AMIS Technology Blog ได้รับการเผยแพร่ในพฤศจิกายน 2018แสดงให้เห็นว่าท่ามกลางความแตกต่างอื่น ๆ :

  • OpenJDK มีการใช้งาน CPU สูงกว่า OracleJDK
  • OpenJDK มีเวลาตอบสนองที่ต่ำกว่า OracleJDK เล็กน้อย
  • OpenJDK มีการใช้หน่วยความจำสูงกว่า OracleJDK

สำหรับรายละเอียดโปรดดูบทความต้นฉบับ

แน่นอนว่า YMMV นี่เป็นเพียงหนึ่งในมาตรฐาน


3

ความเข้าใจของฉันคือ Oracle JDK ไม่สามารถใช้ในการผลิตได้ดังนั้นฉันจึงไม่สามารถใช้งานได้อย่างถูกกฎหมาย (โดยไม่ต้องจ่ายเงิน) สำหรับเว็บแอปพลิเคชันที่ฉันสร้างให้กับ บริษัท ของฉัน ฉันต้องใช้ OpenJDK โปรดแก้ไขฉันถ้าฉันผิด! จากบทความนี้

เริ่มต้นด้วย Java 11, Oracle JDK ถูก จำกัด ในการพัฒนาและทดสอบสภาพแวดล้อม Oracle JDKs สามารถใช้ในการผลิตได้ก็ต่อเมื่อคุณซื้อการสนับสนุนเชิงพาณิชย์ ออราเคิลจะให้บริการ Java builds โดยใช้ OpenJDK ฟรีซึ่งสามารถใช้ในการผลิตได้ แต่สำหรับ Oracle JDK อย่างเป็นทางการแผนงานจริงจะมีลักษณะเช่นนี้:

UPDATE:ฉันผิด ฉันสามารถใช้ Oracle JDK ได้ฟรี แต่จะไม่ได้รับการอัปเดตความปลอดภัยหลังจาก 6 โมงและเราจะต้องรับความเสี่ยง ดูที่ส่วนบทความที่เชื่อมโยงข้างต้น "รถไฟรุ่นใหม่มีความหมายอย่างไรกับ บริษัท ของฉัน"


สิ่งนี้อาจไม่เป็นความจริงอีกต่อไปตั้งแต่ JDK 13 มีใบอนุญาตใหม่สำหรับ Oracle JDK ตามที่ Oracle ระบุ: "ใบอนุญาตใหม่นี้อนุญาตให้มีการใช้งานบางอย่างเช่นการใช้งานส่วนตัวและการพัฒนาโดยไม่มีค่าใช้จ่าย สิทธิ์การใช้งาน Oracle JDK ก่อนหน้าอาจไม่สามารถใช้งานได้อีกต่อไป " ดูoracle.com/downloads/licenses/javase-license1.html
อัลฟลานาแกน

เพิ่งรู้ว่า oracle jdk8u241 รุ่นปัจจุบันใช้งานได้ฟรีหรือไม่
Nirav Shah
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.