Sự khác biệt giữa Oracle JDK và OpenJDK


700

LƯU Ý: Câu hỏi này có từ năm 2014. Kể từ Java 11 OpenJDK và Oracle JDK đang hội tụ.

Có sự khác biệt quan trọng nào giữa Oracle và OpenJDK không?

Ví dụ, bộ sưu tập rác và các tham số JVM khác có giống nhau không?

Có phải GC làm việc khác nhau giữa hai?


3
Điều này cũng có thể có liên quan nếu bạn dự định chuyển từ Oracle sang OpenJDK vì Oracle không còn miễn phí nữa. developers.redhat.com/blog/2018/11/05/
Mạnh

Câu trả lời:


338

Cả OpenJDK và Oracle JDK chỉ được tạo và duy trì bởi Oracle.

OpenJDK và Oracle JDK là các triển khai của cùng một đặc tả Java đã thông qua TCK (Bộ chứng nhận công nghệ Java).

Hầu hết các nhà cung cấp JDK được viết trên OpenJDK bằng cách thực hiện một vài điều chỉnh để [chủ yếu thay thế các bộ phận độc quyền được cấp phép / thay thế bằng các mục hiệu suất cao hơn chỉ hoạt động trên các thành phần HĐH cụ thể] mà không phá vỡ tính tương thích TCK.

Nhiều nhà cung cấp đã triển khai đặc tả Java và đã thông qua TCK. Ví dụ: IBM J9, Azul Zulu, Azul Zing và Oracle JDK.

Hầu như mọi JDK hiện có đều bắt nguồn từ OpenJDK.

Theo đề xuất của nhiều người, cấp phép là một sự thay đổi giữa các JDK.

Bắt đầu với JDK 11 truy cập hỗ trợ lâu dài Oracle JDK / Java SE bây giờ sẽ yêu cầu giấy phép thương mại. Bây giờ bạn nên chú ý đến việc JDK nào bạn đang cài đặt là Oracle JDK mà không đăng ký có thể ngừng hoạt động. nguồn

Tham chiếu: Danh sách các máy ảo Java


13
Vì vậy, câu nói của bạn rằng openjdk là cơ sở cho tất cả các jdks khác chỉ là họ sao chép nó và sau đó tinh chỉnh nó sau thông số kỹ thuật của chính nó?
Karl Morrison

24
Tôi đến bữa tiệc muộn, nhưng dù sao tôi cũng sẽ hỏi. Jdk mang đến cái gì mà openjdk không có? Tất cả những câu trả lời này làm cho openjdk nghe có vẻ tương đương hoặc vượt trội về mọi mặt, nhưng nếu đó là lý do tại sao Oracle thậm chí còn bận tâm duy trì jdk?
Kefka

@ Karl Morrison Theo tôi biết, .. mọi người đều thực hiện thông số JVM chỉ làm theo cách đó .. nhưng không có quy tắc rõ ràng rằng người ta phải tuân theo cách đó ...
Venkateswara Rao

13
@ Mella OpenJDK <= OracleJDK Ví dụ: Oracle JDK có rất ít khóa đáng tin cậy được thiết lập, không có trong OpenJDK (Bây giờ, mọi người chỉ nhập chúng để lấp đầy khoảng trống này) Oracle JDK có một số thư viện SWING được sở hữu để tăng tốc kết xuất .. (Ai đã từng làm ứng dụng máy chủ, có thể không liên quan đến chúng) Oracle JDK có plugin Applet (Lý do tương tự ở trên hoạt động) Lỗi / sửa lỗi JDK của Oracle sẽ được phân phối và xử lý đúng cách bởi Oracle vì OpenJDK rất ít kỹ thuật để đảm bảo tất cả các bản vá được áp dụng và những gì họ sẽ có xung đột
Venkateswara Rao

Lưu ý với mô hình phát hành mới cho java, Oracle có kế hoạch giảm khoảng cách nhiều nhất có thể giữa cả hai jdk. Có những người đóng góp mã nguồn mở khác để mở jdk ngoài các nhà phát triển oracle không? Điều này là để hiểu nếu có đủ hỗ trợ để chuyển một bản sửa lỗi từ phiên bản mới nhất sang phiên bản trước. Có suy nghĩ gì không?
Andy Dufresne

329

Đối với Java 7 , không có gì quan trọng. Dự án OpenJDK chủ yếu dựa trên mã nguồn HotSpot do Sun tài trợ.

Hơn nữa, OpenJDK đã được chọn để triển khai tham chiếu cho Java 7 và được duy trì bởi các kỹ sư của Oracle.

Có một câu trả lời chi tiết hơn từ năm 2012 về sự khác biệt giữa JVM, JDK, JRE & OpenJDK , liên kết đến một bài đăng trên blog của Oracle :

Hỏi : Sự khác biệt giữa mã nguồn được tìm thấy trong kho OpenJDK và mã bạn sử dụng để xây dựng Oracle JDK là gì?

Trả lời : Nó rất gần - quy trình xây dựng của chúng tôi cho các bản phát hành JDK của Oracle được xây dựng trên OpenJDK 7 bằng cách thêm một vài phần, như mã triển khai, bao gồm triển khai Trình cắm Java và Java WebStart của Oracle, cũng như một số thứ ba nguồn đóng các thành phần bên như trình rasterizer đồ họa, một số thành phần bên thứ ba nguồn mở, như Rhino, và một vài bit và phần ở đây và ở đó, như tài liệu bổ sung hoặc phông chữ của bên thứ ba. Tiến về phía trước, mục đích của chúng tôi là mở nguồn tất cả các phần của JDK của Oracle ngoại trừ những phần mà chúng tôi xem là các tính năng thương mại như JRockit Mission Control (chưa có trong Oracle JDK) và thay thế các thành phần bên thứ ba bị đóng gói bằng các lựa chọn thay thế nguồn mở để đạt được sự tương đương gần hơn giữa các cơ sở mã.


42
Ngoài ra có sự khác biệt cấp phép.
mcool 18/03/2015

9
cảm ơn tôi tìm thấy một câu trả lời tốt hơn stackoverflow.com/questions/17360011/
Mạnh

9
Trên ARM ít nhất hai cái đó dường như khác nhau đáng kể về hiệu năng. Tôi sẽ phải làm một số hồ sơ về lý do tại sao nó xảy ra, nhưng sự khác biệt chủ quan là "Oracle JDK vẫn ổn" và "OpenJDK hoàn toàn không sử dụng được".
đôi

1
@dualed tuy nhiên Android đang chuyển sang openjdk bắt đầu từ Android 7. Có vẻ như họ đang chuẩn bị trước những cải tiến đáng kể. venturebeat.com/2015/12/29/ trộm
Johnny Doe

1
@JohnnyDoe Hãy hy vọng rằng nếu google chuyển sang OpenJDK, họ sẽ cung cấp các bản vá hiệu năng ngược dòng để nó cũng chạy tốt trên ARM bên ngoài Android!
đôi

95

Một sự khác biệt quan trọng trong tương lai là lịch phát hành và chính sách hỗ trợ.

OpenJDK

OpenJDK sẽ có một bản phát hành tính năng cứ sau 6 tháng, chỉ được hỗ trợ cho đến khi phát hành tính năng tiếp theo. Đó thực chất là một dòng phát hành liên tục nhắm đến các nhà phát triển.

Oracle JDK

Oracle JDK được nhắm mục tiêu nhiều hơn vào đối tượng doanh nghiệp coi trọng sự ổn định. Nó dựa trên một trong những bản phát hành OpenJDK nhưng sau đó được hỗ trợ dài hạn (LTS). Oracle JDK đã phát hành kế hoạch 3 năm một lần.

nhập mô tả hình ảnh ở đây

Nguồn: https://www.oracle.com/java/java9-screencasts.html?bcid=5582439790001&playerType=single-social&size=events


3
Các bản phát hành dài hạn yêu cầu bạn phải mua hỗ trợ thương mại để nhận các bản cập nhật sau 6 tháng phát hành java. Tầm quan trọng của bản phát hành dài hạn khi so sánh với bản phát hành ngắn hạn là gì? Các bản phát hành ngắn hạn như JDK 9/10 không có hỗ trợ thương mại từ Oracle?
Andy Dufresne

@AndyDufresne tại sao bạn nghĩ bạn sẽ phải trả tiền hỗ trợ chỉ sau 6 tháng? Hiểu biết của tôi là dòng thời gian là TBD. 6 tháng có vẻ rất ngắn mặc dù ... Tôi nghi ngờ chúng ta có thể mong đợi các bản cập nhật công khai trong 5 năm, như Java 8 đang nhận được, nhưng tôi sẽ không ngạc nhiên nếu có các bản cập nhật công khai trong 2 hoặc 3 năm. Tham khảo - Đây là mỗi: oracle.com/technetwork/java/eol-135779.html .
Dao găm Gilbert Arenas

1
Liên kết oracle đề cập "Ví dụ: bản phát hành LTS cho Oracle JDK 11 (18.9 LTS) sẽ được hỗ trợ ít nhất 5 năm như được mô tả trong Chính sách hỗ trợ trọn đời của Oracle". Chính sách này có 3 cấp độ hỗ trợ mà không ai trong số họ xem là miễn phí. Ngoài ra tôi cũng đề cập đến điều này sau khi xem bình luận của azul CTO tại đây - blog.takipi.com/java-11-will-include-more-than-just-features/ . Mục tiêu chính của chiến lược phát hành mới này là không dành thời gian trong việc duy trì các bản phát hành cũ. Nếu sự hỗ trợ là miễn phí, mô hình sẽ giống như cho đến nay.
Andy Dufresne

38

Đối với Java 8 , Oracle JDK so với OpenJDK, tôi có những điểm khác biệt chính:

  • OpenJDK là một triển khai mã nguồn mở của nền tảng Java Standard Edition với sự đóng góp của Oracle và cộng đồng Java mở.

  • OpenJDK được phát hành theo giấy phép GPL v2 trong đó Oracle JDK được cấp phép theo Thỏa thuận cấp phép mã nhị phân của Oracle.

  • Trên thực tế, quy trình xây dựng của Oracle JDK xây dựng từ mã nguồn OpenJDK. Vì vậy, không có sự khác biệt lớn về kỹ thuật giữa Oracle JDK và OpenJDK. Ngoài mã cơ sở, Oracle JDK bao gồm, việc triển khai Java Plugin và Java WebStart của Oracle. Nó cũng bao gồm các thành phần nguồn mở và nguồn mở của bên thứ ba như rasterizer đồ họa và Rhino tương ứng. OpenJDK Font Renderer và Oracle JDK Flight Recorder là những khác biệt lớn đáng chú ý giữa Oracle JDK và OpenJDK.

  • Rockit là JVM của Oracle và từ Java SE 7, HotSpot và JRockit đã hợp nhất thành một JVM duy nhất. Vì vậy, bây giờ chúng tôi chỉ có JVM HotSpot hợp nhất có sẵn.
  • Có những trường hợp mọi người tuyên bố rằng họ gặp vấn đề trong khi chạy OpenJDK và điều đó đã được giải quyết khi chuyển sang Oracle JDK.
  • Twitter có JDK riêng.
  • Phần mềm như Minecraft hy vọng Oracle JDK sẽ được sử dụng. Trong thực tế, cảnh báo.

Để biết danh sách đầy đủ về sự khác biệt, vui lòng xem bài viết nguồn: Oracle JDK vs OpenJDK và Quy trình phát triển JDK của Java


4
Đối với Android Studio, điều này không còn đúng nữa: Bản sao OpenJDK mới nhất đi kèm với Android Studio 2.2 trở lên và đây là phiên bản JDK mà chúng tôi khuyên bạn nên sử dụng cho các dự án Android của mình. Nguồn: developer.android.com/studio/intro/studio-config#jdk
MKesper

Phần mềm như Minecraft hy vọng Oracle JDK sẽ được sử dụng. Trong thực tế, cảnh báo. Trên thực tế, trong Ubuntu, trình cài đặt .deb chính thức của Mojang kéo theo OpenJDK khi cài đặt trình khởi chạy.
Moilleadóir

29

Các JVM của Oracle và OpenJDK giống nhau và có các tính năng GC giống nhau (kể từ phiên bản mới nhất 10+). Trước khi Oracle quản lý JVM OpenJDK, có những khác biệt cụ thể khiến JVM Openjdk cũ gần như không sử dụng được trong nhiều môi trường. Các JVM bây giờ giống nhau.

Các JDK bao gồm JVM như một phần của Kit, khác nhau theo lịch trình cấp phép, phát hành và bảo trì và các thư viện phần mềm có trong JDK. Sự khác biệt quan trọng đối với tôi cũng có nghĩa là những thứ sẽ làm cho mã không chạy nếu không có mặt. Không chỉ cấp phép.

diff --brief -r openjdk oraclejdk

Điều quan trọng là các tệp sau bị thiếu cùng với một loạt các tệp khác trên JDK linux (Vì vậy, nếu bạn đã tuyên bố rằng mã đó không hoạt động trên OpenJDK và đã làm như vậy trên OracleJDK trong khi bạn đang sử dụng javafx thì bạn đã đúng):

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
Cảm ơn bạn đã chỉ ra sự khác biệt thực sự: mã không chạy là một vấn đề thực tế. Bạn đã dựa diffvào đâu?
Matthieu

19

Theo blog oracle, Oracle JDK phát hành cho Java 11 trở về sau

Bắt đầu với Java 11, Oracle sẽ cung cấp các bản phát hành JDK theo Giấy phép công cộng GNU mã nguồn mở v2, với Classpath Exception (GPLv2 + CPE) và theo giấy phép thương mại cho những người sử dụng Oracle JDK như một phần của sản phẩm hoặc dịch vụ của Oracle, hoặc những người không muốn sử dụng phần mềm nguồn mở. Sự kết hợp giữa việc sử dụng giấy phép nguồn mở và giấy phép thương mại này thay thế cho giấy phép BC BCL lịch sử , có sự kết hợp giữa các điều khoản thương mại miễn phí và trả phí.

Các bản dựng khác nhau sẽ được cung cấp cho mỗi giấy phép, nhưng các bản dựng này giống nhau về mặt chức năng ngoài một số khác biệt về mỹ phẩm và bao bì, được mô tả chi tiết bên dưới.

Từ BCL đến GPL

Các Giấy phép Binary Mã cho công nghệ Oracle Java SE ( “BCL”) đã được cấp giấy phép chính cho công nghệ Oracle Java SE trong hơn một thập kỷ. BCL cho phép sử dụng mà không có phí giấy phép trong các điều kiện nhất định. Để đơn giản hóa mọi thứ trong tương lai, Oracle đã bắt đầu cung cấp các bản dựng OpenJDK được cấp phép nguồn mở kể từ Java 9, sử dụng cùng một mô hình giấy phép như nền tảng Linux. Nếu bạn đã quen với việc nhận các nhị phân Oracle Java SE miễn phí, bạn chỉ cần tiếp tục làm như vậy với các bản dựng OpenJDK của Oracle có sẵn tại jdk.java.net . Nếu bạn đã quen với việc nhận các nhị phân Oracle Java SE như một phần của sản phẩm hoặc dịch vụ thương mại từ Oracle, thì bạn có thể tiếp tục nhận các bản phát hành JDK của Oracle thông qua Hỗ trợ Oracle của tôi (MOS) và các địa điểm khác.

Chức năng giống hệt nhau và có thể hoán đổi cho nhau ...

Các tính năng thương mại JDK được cấp phép BCL của Oracle có chứa các tính năng thương mại trong lịch sử mà không có sẵn trong các bản dựng OpenJDK. Tuy nhiên, như đã hứa , trong năm qua, Oracle đã đóng góp các tính năng này cho Cộng đồng OpenJDK, bao gồm:

Do đó, từ Java 11 trở đi, các bản dựng Oracle JDK và các bản dựng OpenJDK về cơ bản sẽ giống hệt nhau.

... nhưng với một số khác biệt về mỹ phẩm và bao bì

Vẫn còn một số ít sự khác biệt, một số chủ ý và mỹ phẩm, và một số đơn giản chỉ vì có thêm thời gian để thảo luận với những người đóng góp OpenJDK được bảo hành.

  • Oracle JDK 11 phát ra cảnh báo khi sử dụng tùy chọn -XX: + UnlockCommIALFeatures, trong khi trong OpenJDK xây dựng tùy chọn này dẫn đến lỗi. Tùy chọn này không bao giờ là một phần của OpenJDK và sẽ không có ý nghĩa khi thêm nó ngay bây giờ, vì không có tính năng thương mại nào trong OpenJDK. Sự khác biệt này vẫn còn để giúp người dùng Oracle JDK 10 và các bản phát hành trước đó dễ dàng chuyển sang Oracle JDK 11 trở lên.
  • Oracle JDK 11 có thể được cấu hình để cung cấp dữ liệu nhật ký sử dụng cho công cụ Bảng điều khiển Advanced Advanced Console Console , là một sản phẩm thương mại riêng biệt của Oracle. Chúng tôi sẽ làm việc với những người đóng góp OpenJDK khác để thảo luận về cách dữ liệu sử dụng như vậy có thể hữu ích trong OpenJDK trong các bản phát hành trong tương lai, nếu có. Sự khác biệt này chủ yếu vẫn là cung cấp trải nghiệm nhất quán cho khách hàng của Oracle cho đến khi các quyết định đó được đưa ra.
  • Lệnh javac --release hoạt động khác nhau đối với các mục tiêu Java 9 và Java 10, vì trong các bản phát hành đó, Oracle JDK chứa một số mô-đun bổ sung không phải là một phần của các bản phát hành OpenJDK tương ứng:
    • javafx.base
    • javafx.controls
    • javafx.fxml
    • javafx.gogics
    • javafx.media
    • javafx.web
    • java.jnlp
    • jdk.jfr
    • jdk.man Quản lý.cmm
    • jdk.man Quản lý.jfr
    • jdk.man Quản lý.resource
    • jdk.packager.service
    • jdk.snmp

Sự khác biệt này vẫn còn để cung cấp trải nghiệm nhất quán cho các loại sử dụng di sản cụ thể. Các mô-đun này hiện có sẵn một cách riêng biệt như một phần của OpenJFX , hiện có trong cả OpenJDK và Oracle JDK vì chúng là các tính năng thương mại mà Oracle đã đóng góp cho OpenJDK (ví dụ: Trình ghi chuyến bay) hoặc đã bị xóa khỏi Oracle JDK 11 (ví dụ: JNLP) .

  • Đầu ra của các lệnh java --version và java -fullversion sẽ phân biệt các bản dựng JDK của Oracle với các bản dựng OpenJDK, để các nhóm hỗ trợ có thể chẩn đoán bất kỳ vấn đề nào có thể tồn tại. Cụ thể, chạy java --version với bản dựng Oracle JDK 11 cho kết quả:

java 11 2018-09-25

Môi trường thời gian chạy Java (TM) SE 18.9 (bản dựng 11 + 28)

Máy chủ 64-bit Java HotSpot (TM) VM 18.9 (bản dựng 11 + 28, chế độ hỗn hợp)

Và đối với bản dựng OpenJDK 11:

phiên bản openjdk "11" 2018-09-25

Môi trường thời gian chạy OpenJDK 18.9 (bản dựng 11 + 28)

OpenJDK 64-Bit Server VM 18.9 (bản dựng 11 + 28, chế độ hỗn hợp)

  • Oracle JDK luôn yêu cầu các nhà cung cấp mật mã của bên thứ ba phải được ký bởi một chứng chỉ đã biết. Khung mật mã trong OpenJDK có giao diện mã hóa mở, nghĩa là nó không hạn chế nhà cung cấp nào có thể được sử dụng. Oracle JDK 11 sẽ tiếp tục yêu cầu chữ ký hợp lệ và các bản dựng Oracle OpenJDK sẽ tiếp tục cho phép sử dụng chữ ký hợp lệ hoặc nhà cung cấp tiền điện tử của bên thứ ba không dấu.
  • Oracle JDK 11 sẽ tiếp tục bao gồm các trình cài đặt, nhãn hiệu và bao bì JRE cho trải nghiệm phù hợp với việc sử dụng máy tính để bàn cũ. Các bản dựng Oracle OpenJDK hiện có sẵn dưới dạng tệp zip và tar.gz, trong khi các định dạng phân phối thay thế đang được xem xét.

10

Một danh sách một số khác biệt về mỹ phẩm và bao bì còn lại giữa Oracle JDK 11 và OpenJDK 11 có thể được tìm thấy trong bài đăng trên blog này:

https://bloss.oracle.com/java-pl platform-group / oracle-jdk-release-for-java-11-and-later

Nói ngắn gọn:

  • Oracle JDK 11 phát ra cảnh báo khi sử dụng tùy chọn -XX: + UnlockCommIALFeatures,
  • nó có thể được cấu hình để cung cấp dữ liệu nhật ký sử dụng cho công cụ Bảng điều khiển quản lý nâng cao của Advanced,
  • nó luôn yêu cầu các nhà cung cấp mật mã của bên thứ ba phải được ký bởi một chứng chỉ đã biết,
  • nó sẽ tiếp tục bao gồm các trình cài đặt, nhãn hiệu và bao bì JRE,
  • trong khi lệnh javac --release hoạt động hơi khác nhau cho các mục tiêu Java 9 và Java 10 và
  • đầu ra của các lệnh java --version và java -fullversion sẽ phân biệt các bản dựng JDK của Oracle với các bản dựng OpenJDK.

2
Tôi nhận thấy rằng hầu hết các câu trả lời của bạn có chữ ký trong đó. Tôi đã chỉnh sửa chúng ra. Vui lòng đọc các khẩu hiệu và chữ ký không được phép? stackoverflow.com/help/behavior (cụ thể là phần "Không sử dụng chữ ký, khẩu hiệu hoặc lời chào.")
Mark Rotteveel

7
  1. Oracle sẽ cung cấp các bản phát hành ba năm một lần, trong khi OpenJDK sẽ được phát hành sáu tháng một lần.
  2. Oracle cung cấp hỗ trợ dài hạn cho các bản phát hành của nó. Mặt khác, OpenJDK chỉ hỗ trợ các thay đổi cho bản phát hành cho đến khi phiên bản tiếp theo được phát hành.
  3. Oracle JDK được cấp phép theo Thỏa thuận cấp phép mã nhị phân của Oracle, trong khi OpenJDK có Giấy phép công cộng GNU (GNU GPL) phiên bản 2 với ngoại lệ liên kết.
  4. Sản phẩm của Oracle có tính năng Trình ghi chuyến bay, Điều khiển nhiệm vụ Java và Chia sẻ dữ liệu lớp ứng dụng, trong khi OpenJDK có tính năng Trình kết xuất phông chữ. Ngoài ra, Oracle có nhiều tùy chọn Bộ sưu tập rác và trình kết xuất tốt hơn,
  5. Oracle JDK được phát triển hoàn chỉnh bởi Tập đoàn Oracle trong khi OpenJDK được phát triển bởi Oracle, OpenJDK và Cộng đồng Java. Tuy nhiên, các công ty nổi tiếng hàng đầu như Red Hat, Azul Systems, IBM, Apple Inc., SAP AG cũng tham gia tích cực vào sự phát triển của mình.

Từ Java 11 chuyển sang một thay đổi lớn

Oracle sẽ thay đổi giấy phép BCLiên lịch sử của mình với sự kết hợp giữa giấy phép thương mại và nguồn mở

  • Bộ công cụ của Oracle cho Java 11 phát ra cảnh báo khi sử dụng tùy chọn -XX: + UnlockCommIALFeatures, trong khi trong các bản dựng OpenJDK, tùy chọn này dẫn đến lỗi
  • Oracle JDK cung cấp một cấu hình để cung cấp dữ liệu nhật ký sử dụng cho công cụ Bảng điều khiển quản lý nâng cao của Advanced
  • Oracle luôn yêu cầu các nhà cung cấp mật mã của bên thứ ba phải được ký bởi một chứng chỉ đã biết, trong khi khung mã hóa trong OpenJDK có giao diện mã hóa mở, điều đó có nghĩa là không có hạn chế nào về việc nhà cung cấp có thể sử dụng
  • Oracle JDK 11 sẽ tiếp tục bao gồm các trình cài đặt, nhãn hiệu và bao bì JRE, trong khi các bản dựng OpenJDK hiện có sẵn dưới dạng tệp zip và tar.gz
  • Lệnh javacTHERrelease hoạt động khác nhau cho các mục tiêu Java 9 và Java 10 do sự hiện diện của một số mô-đun bổ sung trong bản phát hành của Oracle
  • Đầu ra của các lệnh javaTHERversion và java -fullversion sẽ phân biệt các bản dựng của Oracle với các bản dựng OpenJDK


Cập nhật: ngày 25 tháng 8 năm 2019



nhập mô tả hình ảnh ở đây

để biết thêm chi tiết oracle-vs-openjdk



5

Bên cạnh sự khác biệt về cấp phép rõ ràng, sự khác biệt chính giữa OpenJDK và OracleJDK 11 là sự cập nhật về tính ổn định và hiệu suất.

Nguồn: https://www.youtube.com/watch?v=Adv9--6IcQI&t=385

Cứ sau 6 tháng, hai cơ sở mã sẽ không đồng bộ. Nhưng trong cửa sổ 6 tháng, OpenJDK sẽ chỉ nhận được các bản cập nhật bảo mật trong khi OracleJDK sẽ nhận được các bản cập nhật hiệu suất và độ ổn định bổ sung.

Do các bản phát hành cập nhật chỉ xảy ra 3 tháng một lần cho cả OpenJDK và OracleJDK, điều này có nghĩa là bạn đang bỏ lỡ (nhiều nhất) 3 tháng sửa lỗi cho đến khi bản phát hành chính tiếp theo xuất hiện và bạn nâng cấp. Tuy nhiên, nếu bạn chọn gắn bó với các bản phát hành LTS thì giấy phép thương mại bắt đầu có ý nghĩa hơn.


3

Ngoài ra, đối với Java 8, một điểm chuẩn hiệu năng thú vị cho ứng dụng Spring Boot REST phản ứng (không chặn) được lưu trữ trên các JVM khác nhau bởi Blog Công nghệ AMIS đã được xuất bản vào tháng 11 năm 2018 cho thấy, trong số những khác biệt khác:

  • OpenJDK có mức sử dụng CPU cao hơn OracleJDK,
  • OpenJDK có thời gian phản hồi thấp hơn một chút so với OracleJDK,
  • OpenJDK có mức sử dụng bộ nhớ cao hơn OracleJDK,

Để biết chi tiết xin vui lòng xem bài viết nguồn.

Tất nhiên YMMV, đây chỉ là một trong những điểm chuẩn.


3

Hiểu biết của tôi là Oracle JDK không thể được sử dụng trong sản xuất, do đó tôi không thể sử dụng hợp pháp (mà không phải trả tiền), cho ứng dụng web tôi đang xây dựng cho công ty của mình. Tôi phải sử dụng OpenJDK. Xin hãy sửa tôi nếu tôi sai! Từ bài viết này .

Bắt đầu với Java 11, Oracle JDK bị giới hạn trong các môi trường phát triển và thử nghiệm. Oracle JDK chỉ có thể được sử dụng trong sản xuất nếu bạn mua hỗ trợ thương mại. Thay vào đó, Oracle sẽ cung cấp các bản dựng Java dựa trên OpenJDK miễn phí có thể được sử dụng trong sản xuất. Nhưng đối với Oracle JDK chính thức, lộ trình thực tế sẽ như thế này:

CẬP NHẬT: Tôi sai. Tôi có thể sử dụng Oracle JDK miễn phí nhưng sẽ không nhận được cập nhật bảo mật sau 6 tháng và chúng tôi sẽ phải chịu rủi ro. Nhìn vào phần bài viết được liên kết ở trên "Tàu phát hành mới có ý nghĩa gì với công ty của tôi?".


Điều này có thể không còn đúng với JDK 13. Có một giấy phép mới cho Oracle JDK, theo Oracle: "Giấy phép mới cho phép một số sử dụng nhất định, như sử dụng cá nhân và sử dụng phát triển, miễn phí - nhưng sử dụng khác được ủy quyền theo giấy phép Oracle JDK trước đây có thể không còn nữa ". Xem oracle.com/doads/licenses/javase-license1.html .
AL Flanagan

Chỉ muốn biết, bản phát hành hiện tại của oracle jdk8u241 có miễn phí cho sử dụng sản xuất không?
Nirav Shah
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.