Sự khác biệt giữa JVM, JDK, JRE & OpenJDK là gì?


Câu trả lời:


375

JVM

Các Java Virtual Machine (JVM) là máy ảo chạy bytecode Java. JVM không hiểu mã nguồn Java; đó là lý do tại sao bạn cần biên dịch các *.javatệp của mình để có được *.classcác tệp có chứa mã byte do JVM hiểu. Đây cũng là thực thể cho phép Java là "ngôn ngữ di động" ( viết một lần, chạy mọi nơi ). Thật vậy, có các triển khai cụ thể của JVM cho các hệ thống khác nhau (Windows, Linux, macOS, xem danh sách Wikipedia ), mục đích là với cùng một mã byte, tất cả chúng đều cho kết quả giống nhau.

JDK và JRE

Để giải thích sự khác biệt giữa JDK và JRE, tốt nhất là đọc tài liệu của Oracle và tham khảo sơ đồ:

Môi trường chạy thi hành Java (JRE)

Môi trường chạy thi hành Java (JRE) cung cấp các thư viện, Máy ảo Java và các thành phần khác để chạy các applet và ứng dụng được viết bằng ngôn ngữ lập trình Java. Ngoài ra, hai công nghệ triển khai chính là một phần của JRE: Java Plug-in, cho phép các applet chạy trong các trình duyệt phổ biến; và Java Web Start, triển khai các ứng dụng độc lập qua mạng. Nó cũng là nền tảng cho các công nghệ trong Nền tảng Java 2, Phiên bản doanh nghiệp (J2EE) để phát triển và triển khai phần mềm doanh nghiệp. JRE không chứa các công cụ và tiện ích như trình biên dịch hoặc trình gỡ lỗi để phát triển các ứng dụng và ứng dụng.

Bộ phát triển Java (JDK)

JDK là một siêu bộ của JRE và chứa mọi thứ có trong JRE, cộng với các công cụ như trình biên dịch và trình gỡ lỗi cần thiết để phát triển các ứng dụng và ứng dụng.

Lưu ý rằng Oracle không phải là người duy nhất cung cấp JDK.

OpenJDK

OpenJDK là một triển khai mã nguồn mở của JDK và là cơ sở cho Oracle JDK. Hầu như không có sự khác biệt giữa Oracle JDK và OpenJDK.

Sự khác biệt được nêu trong blog này :

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ã.

Cập nhật cho JDK 11 - Một bài viết từ Donald Smith cố gắng phân biệt sự khác biệt giữa Oracle JDK và OpenJDK của Oracle: https://bloss.oracle.com/java-pl platform-group / oracle-jdk-release-for-java-11- và sau đó


@ alain.janinm, vậy bạn sẽ chọn OracleJDK hoặc OpenJDK cho sự phát triển của mình?
Pacerier

@Pacerier Tôi đã từng sử dụng OracleJDK tại nơi làm việc nhưng tôi không có gì chống lại OpenJDK :) Thật ra tôi chưa bao giờ vấp phải sự khác biệt cụ thể khiến tôi phải lựa chọn giữa họ. Nếu bạn thích mã nguồn mở và không cần sử dụng giấy phép độc quyền thì hãy truy cập OpenJDK.
alain.janinm

1
Vui lòng cho tôi biết nếu tôi đúng về các vấn đề sau: Về cơ bản không có ứng dụng Java thực sự nào có thể chạy mà không có JRE. Do đó, tất cả các bản tải xuống (có thể ngoại trừ một số nội dung kỳ lạ dành cho nhà phát triển) có chứa cả JVM và JRE (nếu không phải là JDK superset)?
Mads Skjern 8/2/2015

8
@MadsSkjern Có, bạn cần có JRE để chạy ứng dụng Java. Nhưng khi bạn tải xuống một ứng dụng Java, nó không đi kèm với JRE, nó hy vọng bạn đã cài đặt một ứng dụng trên máy tính của mình.
alain.janinm 8/2/2015

92

JVM là Máy ảo Java - nó thực sự chạy Java ByteCode.

JRE là Môi trường chạy thi hành Java - nó chứa JVM, trong số những thứ khác và là thứ bạn cần để chạy chương trình Java.

JDK là Bộ công cụ phát triển Java - đó là JRE, nhưng với javac (là thứ bạn cần để biên dịch mã nguồn Java) và các công cụ lập trình khác được thêm vào.

OpenJDK là một triển khai JDK cụ thể.


3
Có lẽ bởi vì bạn đã không đề cập đến cái other thingscó trong JVM. Họ là ai ? Bài viết này có trả lời đầy đủ câu hỏi đó không - javabeat.net/what-is-the-difference-b between
jrejvm

OpenJDK chứa JVM, một trong những triển khai của Đặc tả JVM. Oracle JDK chứa một triển khai khác của Đặc tả JVM
AKh

46

JDK (Bộ phát triển Java)

Bộ phát triển Java chứa các công cụ cần thiết để phát triển các chương trình Java và JRE để chạy các chương trình. Các công cụ bao gồm trình biên dịch (javac.exe), trình khởi chạy ứng dụng Java (java.exe), Appletviewer, v.v.

Trình biên dịch chuyển đổi mã java thành mã byte. Trình khởi chạy ứng dụng Java mở JRE, tải lớp và gọi phương thức chính của nó.

Bạn cần JDK, nếu bạn muốn viết các chương trình của riêng mình và biên dịch chúng. Để chạy các chương trình java, JRE là đủ.

JRE được nhắm mục tiêu để thực thi các tệp Java

tức là JRE = JVM + Các lớp gói Java (như produc, math, lang, awt, swing, v.v.) + thư viện thời gian chạy.

JDK chủ yếu được nhắm mục tiêu để phát triển java. Tức là Bạn có thể tạo tệp Java (với sự trợ giúp của các gói Java), biên dịch tệp Java và chạy tệp java.

JRE (Môi trường chạy thi hành Java)

Môi trường chạy thi hành Java chứa JVM, thư viện lớp và các tệp hỗ trợ khác. Nó không chứa bất kỳ công cụ phát triển nào như trình biên dịch, trình gỡ lỗi, v.v. Thật ra JVM chạy chương trình và nó sử dụng các thư viện lớp và các tệp hỗ trợ khác được cung cấp trong JRE. Nếu bạn muốn chạy bất kỳ chương trình java nào, bạn cần cài đặt JRE trong hệ thống

Máy ảo Java cung cấp một cách thực thi mã độc lập với nền tảng; Điều đó có nghĩa là biên dịch một lần trong bất kỳ máy nào và chạy nó ở bất kỳ đâu (bất kỳ máy nào).

JVM (Máy ảo Java)

Như tất cả chúng ta đều biết khi chúng ta biên dịch một tệp Java, đầu ra không phải là một tệp 'exe' mà là một tệp '. Class'. Tệp '. class' bao gồm các mã byte Java mà JVM có thể hiểu được. Máy ảo Java diễn giải mã byte thành mã máy tùy thuộc vào sự kết hợp phần cứng và hệ điều hành cơ bản. Nó chịu trách nhiệm cho tất cả những thứ như thu gom rác, kiểm tra giới hạn mảng, vv JVM phụ thuộc vào nền tảng.

JVM được gọi là ảo ảo vì nó cung cấp giao diện máy không phụ thuộc vào hệ điều hành cơ bản và kiến ​​trúc phần cứng máy. Sự độc lập này với phần cứng và hệ điều hành là nền tảng của giá trị ghi lại mọi lúc mọi nơi của các chương trình Java.

Có các triển khai JVM khác nhau ở đó. Chúng có thể khác nhau về những thứ như hiệu năng, độ tin cậy, tốc độ, v.v. Những cách triển khai này sẽ khác nhau ở những khu vực mà đặc tả Java không đề cập đến cách triển khai các tính năng, như cách quy trình thu gom rác hoạt động phụ thuộc vào JVM, thông số Java không xác định bất kỳ cách cụ thể để làm điều này.


23

Máy ảo Java (JVM) là một máy ảo có thể thực thi Java ByteCode. Nó là thành phần thực thi mã của nền tảng phần mềm Java.

Các Java Development Kit (JDK) là một sản phẩm Tổng công ty Oracle nhằm phát triển Java. Kể từ khi giới thiệu Java, cho đến nay, Bộ công cụ phát triển phần mềm Java (SDK) được sử dụng rộng rãi nhất.

Môi trường chạy thi hành Java , còn được gọi là Môi trường chạy thi hành Java, Môi trường thời gian chạy

OpenJDK (Bộ công cụ phát triển Java mở) là một triển khai mã nguồn mở và miễn phí của ngôn ngữ lập trình Java. Đó là kết quả của một nỗ lực Sun microsystems bắt đầu vào năm 2006. Việc triển khai được cấp phép theo Giấy phép Công cộng GNU (GPL) với một ngoại lệ liên kết.


Câu trả lời tốt, nhưng một làm rõ. Những người khác ngoài Oracle sản xuất JDK - ví dụ IBM cho AIX và z / OS, HP cho HP-UX, v.v.
Trent Gray-Donald

16

JVM là mã Java máy ảo thực thi trên

JRE là môi trường (thư viện chuẩn và JVM) cần thiết để chạy các ứng dụng Java

JDK là JRE với các công cụ và tài liệu dành cho nhà phát triển

OpenJDK là phiên bản mã nguồn mở của JDK, không giống như JDK phổ biến do Oracle sở hữu


15

JDK (Bộ phát triển Java):

  • chứa các công cụ cần thiết để phát triển các chương trình Java.
  • Bạn cần JDK, nếu bạn muốn viết các chương trình của riêng mình và biên dịch chúng.
  • JDK chủ yếu được nhắm mục tiêu để phát triển java.

JRE (Môi trường chạy thi hành Java)

Môi trường chạy thi hành Java chứa JVM, thư viện lớp và các tệp hỗ trợ khác. JRE được nhắm mục tiêu để thực hiện các tệp Java.

JVM (Máy ảo Java)

JVM diễn giải mã byte thành mã máy tùy thuộc vào sự kết hợp phần cứng và hệ điều hành cơ bản. Nó chịu trách nhiệm cho tất cả những thứ như thu gom rác, kiểm tra giới hạn mảng, vv Máy ảo Java cung cấp một cách thực thi mã độc lập với nền tảng.


6

JDK - Biên dịch java thành ByteCode. Bao gồm các trình sửa lỗi, Trình biên dịch, vv

javac file.java // Is executed using JDK

JVM - Thực thi mã byte. JVM là một trong đó làm cho nền tảng java độc lập. Nhưng JVM khác nhau cho các nền tảng.

JRE - JVM cùng với các thư viện thời gian chạy java để thực thi các chương trình java.


4

Một khía cạnh khác đáng được đề cập:

JDK (bộ phát triển java)

Bạn sẽ cần nó cho mục đích phát triển như tên cho thấy.

Ví dụ: một công ty phần mềm sẽ cài đặt JDK trong máy tính của họ vì họ sẽ cần phát triển phần mềm mới liên quan đến việc biên dịch và chạy các chương trình Java của họ.

Vì vậy, chúng ta có thể nói rằng JDK = JRE + JVM.

JRE (môi trường thời gian chạy java)

Nó cần thiết để chạy các chương trình Java. Bạn không thể biên dịch các chương trình Java với nó.

Ví dụ: một người dùng máy tính thông thường muốn chạy một số trò chơi trực tuyến thì sẽ cần JRE trong hệ thống của mình để chạy các chương trình Java.

JVM (máy ảo java)

Như bạn có thể biết nó chạy mã byte. Nó làm cho nền tảng Java trở nên độc lập bởi vì nó thực thi .classtệp mà bạn nhận được sau khi bạn biên dịch chương trình Java bất kể bạn biên dịch nó trên Windows, Mac hay Linux.

Mở JDK

Vâng, như tôi đã nói ở trên. Bây giờ JDK được tạo bởi một công ty khác nhau, một trong số chúng là nguồn mở và miễn phí cho sử dụng công cộng là OpenJDK, trong khi một số khác là JDockit JDK của Oracle Corporation hoặc JDK của IBM.

Tuy nhiên, tất cả chúng có thể xuất hiện giống nhau cho người dùng phổ thông.

Phần kết luận

Nếu bạn là một lập trình viên Java, bạn sẽ cần JDK trong hệ thống của mình và gói này cũng sẽ bao gồm JRE và JVM nhưng nếu bạn là người dùng bình thường thích chơi trò chơi trực tuyến thì bạn sẽ chỉ cần JRE và gói này sẽ không có JDK trong đó. .

Nói cách khác, JDK là ông nội JRE là cha và JVM là con trai của họ.


9
Bài viết của bạn sai ở khắp mọi nơi. JRE (môi trường thời gian chạy) chứa JVM (máy ảo) và Thư viện lớp Java. JDK chứa JRE và một loạt các công cụ lập trình cho các nhà phát triển. vi.wikipedia.org/wiki/JDK en.wikipedia.org/wiki/Java_virtual_machine Trả lời nhận xét của tôi khi bạn sửa nó và tôi sẽ xóa downvote.
nhahtdh

@nhahtdh chúng ta có thể nói: jdk là gói độc lập, có thể tải xuống, cài đặt riêng. Jre = một số lớp + plugin java + JVM
Prakash Pandey

3

Java là ngôn ngữ và bao gồm một cú pháp được gõ chặt chẽ và mạnh mẽ mà bây giờ bạn rất quen thuộc.

Nền tảng Java 2, Phiên bản tiêu chuẩn, còn được gọi là J2SE, đã đề cập đến nền tảng và bao gồm các lớp trong các gói java.lang và java.io, trong số các gói khác. Đó là khối xây dựng mà các ứng dụng Java được xây dựng dựa trên.

Máy ảo Java, hay JVM, là một máy ảo phần mềm chạy mã Java được biên dịch. Do mã Java được biên dịch chỉ đơn thuần là mã byte, JVM chịu trách nhiệm biên dịch mã byte đó thành mã máy trước khi chạy mã. (Cái này thường được gọi là Trình biên dịch đúng lúc hoặc Trình biên dịch JIT.) JVM cũng đảm nhiệm việc quản lý bộ nhớ để mã ứng dụng không phải.

Bộ công cụ phát triển Java, hay JDK, đã và vẫn là phần của các nhà phát triển phần mềm Java sử dụng để tạo các ứng dụng Java. Nó chứa trình biên dịch ngôn ngữ Java, trình tạo tài liệu, các công cụ để làm việc với mã gốc và (thông thường) mã nguồn Java cho nền tảng để cho phép gỡ lỗi các lớp nền tảng.

Môi trường chạy thi hành Java, hay JRE, vẫn là phần mà người dùng cuối tải xuống để chạy các ứng dụng Java đã biên dịch. Nó bao gồm một JVM nhưng không chứa bất kỳ công cụ phát triển nào được gói trong JDK. Tuy nhiên, JDK không chứa JRE.


3

JVM: Một đặc tả mô tả cách / tài nguyên để chạy chương trình java. Thực tế thực thi mã byte và làm cho nền tảng java độc lập. Làm như vậy, nó là khác nhau cho nền tảng khác nhau. JVM cho windows không thể hoạt động như JVM cho UNIX.

JRE: Triển khai JVM. (JVM + thư viện thời gian chạy)

JDK: Trình biên dịch java JRE + và các công cụ cần thiết khác để xây dựng chương trình java từ đầu


2

JVM : điều này thực sự có nghĩa là trình thông dịch mã byte. Nó phụ thuộc vào nền tảng. Ví dụ: trong nền tảng Windows, điều kiện tiên quyết ' java.exe ' hoặc ' javaw.exe ' là quá trình jvm.

JDK : là bộ công cụ chứa các thư viện và tiện ích cần thiết để phát triển và thực thi chương trình / ứng dụng java

JRE : là môi trường thực thi cho một ứng dụng java.ie, nó chỉ hỗ trợ các phụ thuộc thời gian chạy bao gồm jvm cho chương trình được biên dịch. Nếu chúng ta muốn biên dịch một chương trình java, chúng ta cần jdk.


2

JVM: máy ảo của java. cho máy biết phải làm gì với Mã Java. Bạn không thể tải xuống JVM. Nó được đóng gói trong một số thành phần khác.

JRE: Một số thành phần khác được đề cập ở trên là JRE. Đó là JVM + các tệp khác để tạo môi trường thời gian chạy

JDK: chứa JRE (lần lượt chứa JVM). Khi bạn nhận được JDK, bạn không cần cài đặt JRE và JVM riêng. Nó chứa trình biên dịch biên dịch các tệp .java của bạn thành các tệp. Class


2

JVM

JVM (Máy ảo Java) là một máy trừu tượng. Đây là một đặc tả cung cấp môi trường thời gian chạy trong đó java bytecode có thể được thực thi. JVM có sẵn cho nhiều nền tảng phần cứng và phần mềm.

JRE

JRE là từ viết tắt của Java Runtime Môi trường. Nó được sử dụng để cung cấp môi trường thời gian chạy. Đây là việc triển khai JVM. Nó tồn tại về mặt vật lý. Nó chứa tập hợp các thư viện + các tệp khác mà JVM sử dụng khi chạy.

JDK

JDK là từ viết tắt của Java Development Kit. Nó tồn tại về mặt vật lý. Nó chứa các công cụ phát triển JRE +.

Liên kết: - http://www.javatpoint.com/difference-b between - jdk - jre - and - jvm


1

Tóm tắt:

  • JRE = JVM + Gói Java (như produc, math, lang, awt, swing, v.v.) + thư viện thời gian chạy
  • JDK = JRE + Công cụ phát triển / gỡ lỗi

Nếu bạn muốn phát triển trong java, bạn cần JDK, nhưng nếu bạn chỉ muốn chạy java, bạn cần JRE.


0

Máy ảo Java JVM , thực sự thực thi mã byte java. Nó là khối thực thi trên nền tảng JAVA. Nó chuyển đổi mã byte thành mã máy.

JRE Java Runtime Môi trường, cung cấp các yêu cầu tối thiểu để thực thi một ứng dụng Java; nó bao gồm Máy ảo Java (JVM), các lớp lõi và các tệp hỗ trợ.

JDK Java Development Kit, nó có tất cả các công cụ để phát triển phần mềm ứng dụng của bạn. Nó là JRE + JVM

Open JDK là một triển khai nguồn mở và miễn phí của Nền tảng Java.


0

Theo thuật ngữ cư sĩ: - JDK = JRE + Công cụ phát triển / gỡ lỗi , trong đó JDK là gói hoàn chỉnh của chúng tôi để làm việc với Java, từ việc tạo biên dịch cho đến khi chạy nó. Mặt khác, JRE chỉ chạy mã (Mã Byte).

Lưu ý: - Cho dù chúng tôi đang cài đặt JDK hoặc JRE, JVM sẽ đi kèm với cả hai gói và JVM là phần mà trình biên dịch JIT chuyển đổi mã byte thành mã cụ thể của máy.

Chỉ cần đọc bài viết về JDK, JRE, JVM và JIT


0

JDK : Gói hoàn chỉnh mà bạn cần viết và chạy mã java

OpenJDK : Một triển khai JDK độc lập để làm cho nó tốt hơn nhiều

JVM : Chuyển đổi mã Java thành mã byte và cung cấp các thông số kỹ thuật cho biết cách mã Java được biên dịch, tải, xác minh, kiểm tra lỗi và thực thi.

JRE : Triển khai JVM mà một số thư viện Java được sử dụng để chạy chương trình


0

JRE thực thi ứng dụng nhưng JVM đọc từng dòng hướng dẫn để nó thông dịch.

JDK = JRE + Công cụ phát triển

JRE = JVM + Các lớp thư viện


0

JVM được viết tắt là Java Virtual Machine , JVM là thành phần chính của kiến ​​trúc java. JVM được viết bằng ngôn ngữ lập trình C. Trình biên dịch Java tạo mã byte cho JVM. JVM đọc mã byte xác minh mã byte và liên kết mã với ibrary.

JRE được viết tắt là Môi trường chạy thi hành Java . nó được cung cấp môi trường trong thời gian chạy. Nó là tồn tại vật lý. Nó chứa JVM + bộ thư viện (jar) + các tệp khác.

JDK được viết tắt là Java Development Kit . đó là phát triển các ứng dụng java. Và cũng gỡ lỗi và giám sát các ứng dụng java. JDK chứa các công cụ phát triển JRE + (javac, java)

OpenJDK OpenJDK là phiên bản mã nguồn mở của JDK mặt trời. Oracle JDK là JDK chính thức của Sun.

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.