Lịch sử của Java và sự khác biệt giữa Oracle JDK và OpenJDK
1. Sơ lược lịch sử Java
Java được khởi xướng bởi James Gosling và các bạn đồng nghiệp ở Sun Microsystems năm 1991. Từ ý tưởng muốn lập trình để điều khiển mà không phụ thuộc vào loại CPU cho các thiết bị điện tử như tivi, máy giặt, lò nướng... Do đó, họ đã bắt tay vào xây dựng một ngôn ngữ chạy nhanh, gọn, hiệu quả, độc lập thiết bị và ngôn ngữ “Oak” ra đời, sau đó được đổi tên thành Java.
James Gosling
Ban đầu Java được đặt tên là "Oak" (Cây sồi) bởi vì đây là cây được trồng rất phổ biến tại Mỹ, Đức, Romania,... và được xem là như biểu tượng của nước đó, biểu tượng của sức mạnh. Xung quanh căn phòng làm việc của James Gosling cũng trồng rất nhiều cây sồi.
Oak tree
Năm 1995, Oak đã được đổi tên thành Java bởi vì cái tên Oak đã được đăng ký trước đó bởi một công ty có tên Oak Technologies. Đây cũng là năm ra đời phiên bản đầu tiên của Java, như vậy để có được phiên bản Java đầu tiên các kỹ sư của Sun Microsystems đã làm việc chăm chỉ trong suốt 4 năm, từ năm 1991 đến năm 1995. Trong thời gian này họ đã làm việc ngày đêm, họ đã uống rất nhiều Cà phê và Trà, các đồ uống này giúp họ rất nhiều, những chiếc cốc luôn có mặt trong phòng làm việc của họ.
Tại sao cái tên Java được chọn?
Có rất nhiều cái tên được đưa ra để các thành viên lựa chọn, chẳng hạn Dynamic, Revolutionary, Silk, Jolt, DNA, … Họ muốn cái gì đó mà phản ánh đúng bản chất của công nghệ, đó là: một cuộc cách mạng, có tính động cao, duy nhất, và phát âm dễ dàng, ...
Java là một hòn đảo ở Indonesia, ở nơi này sản phẩm cà phê đầu tiên được sản xuất (gọi là java coffee), hơn nữa cà phê đã gắn bó với các kỹ sư trong suốt 4 năm làm việc để cho ra đời phiên bản Java đầu tiên, đó là lý do tại sao hầu hết các thành viên trong nhóm lựa chọn cái tên Java và vì sao biểu tượng của Java là cốc cà phê bốc khói nghi ngút thơm lừng.
Theo James Gosling thì Java là một trong những lựa chọn hàng đầu cùng với Silk. Tuy nhiên, vì Java có tính duy nhất hơn, nên hầu như tất cả thành viên trong nhóm đều lựa chọn Java.
2. JVM và khẩu hiệu của Java
Mục đích lớn nhất của Java là làm sao một chương trình được viết ra có thể chạy được trên các nền tảng khác nhau. Câu khẩu hiệu nổi tiếng của Java là "Write Once and Run Anywhere - WORA" (Viết một lần và chạy được ở mọi nơi).
Trước khi Java ra đời, một chương trình được viết ra và được biên dịch (compile) thành mã máy (machine code) chạy trên hệ điều hành Windows sẽ không thể chạy được trên hệ điều hành Linux, bởi vì có quá nhiều sự khác biệt.
Các kỹ sư của Sun Microsystems đã tạo ra JVM (Java Virtual Machine) (Máy ảo Java) để cài đặt trên các nền tảng (platform) khác nhau như Windows, Linux, Mac,.
Các chương trình viết bằng ngôn ngữ Java được biên dịch (compile) thành Byte Code, một mã đặc biệt có thể chạy được trong môi trường JVM. JVM giúp thông dịch các Byte Code thành mã của máy vật chủ (host machine). Đây chính là nguyên tắc tại sao Java có thể chạy được trên các nền tảng khác nhau.
3. JDK, JRE là gì?
JRE
JRE là từ viết tắt của Java Runtime Environment (Môi trường chạy Java), nó bao gồm JVM (Máy ảo Java) và một số thư viện Java giúp thực thi các chương trình viết bằng ngôn ngữ Java.
JDK
JDK là từ viết tắt của Java Development Kit (Bộ phát triển Java), nó bao gồm 2 thành phần JRE và Java Development Tools (Các công cụ phát triển Java).
JDK cần thiết cho các lập trình viên vì Java Development Tools cung cấp các công cụ để phát triển ứng dụng Java, chẳng hạn Javac giúp biên dịch (compile) các mã nguồn của lập trình viên thành Byte Code,.. sau đó sử dụng JRE để chạy ứng dụng trong quá trình phát triển.
4. OpenJDK vs Oracle JDK
Dưới đây là bảng mô tả lịch sử các phiên bản của Java.
Version | Release
date | End of Free
Public Updates | Extended
Support Until |
JDK Beta | 1995 | ? | ? |
JDK 1.0 | January 1996 | ? | ? |
JDK 1.1 | February 1997 | ? | ? |
J2SE 1.2 | December 1998 | ? | ? |
J2SE 1.3 | May 2000 | ? | ? |
J2SE 1.4 | February 2002 | October 2008 | February 2013 |
J2SE 5.0 | September 2004 | November 2009 | April 2015 |
Java SE 6 | December 2006 | April 2013 | December 2018 |
Java SE 7 | July 2011 | April 2015 | July 2022 |
Java SE 8 (LTS) | March 2014 | January 2019 for Oracle (commercial) December 2020 for Oracle (personal use) At least September 2023 for AdoptOpenJDK At least June 2023 for Amazon Corretto | December 2030 |
Java SE 9 | September 2017 | March 2018 for OpenJDK | N/A |
Java SE 10 | March 2018 | September 2018 for OpenJDK | N/A |
Java SE 11 (LTS) | September 2018 | At least August 2024 for Amazon Corretto
September 2022 for AdoptOpenJDK | September 2026 |
Java SE 12 | March 2019 | September 2019 for OpenJDK | N/A |
Java SE 13 | September 2019 | March 2020 for OpenJDK | N/A |
Java SE 14 | March 2020 | September 2020 for OpenJDK | N/A |
Java SE 15 | September 2020 | March 2021 for OpenJDK | N/A |
Java SE 16 | March 2021 | September 2021 for OpenJDK | N/A |
Java SE 17 (LTS) | September 2021 | TBA | TBA |
Một sự kiện lớn xẩy ra vào tháng 10 năm 2009, Oracle mua Sun Microsystem, như vậy Java đã chính thức thay đổi chủ sở hữu. Hãy chú ý tới thời điểm trước và sau năm 2009.
Các phiên bản Java từ 1 đến 6 được phát triển bởi Sun Microsystem, họ mở mã nguồn của Java cho tất cả mọi người trên thế giới.
Tháng 7 năm 2011, Oracle phát hành Java 7, họ đã phát hành 2 biến thể khác nhau của JDK là Oracle JDK và OpenJDK, thời điểm đó mã nguồn của 2 biến thể này không có quá nhiều sự khác biệt, bởi vì chúng đều được thừa kế từ JDK 6.
OpenJDK
OpenJDK được mở mã nguồn, nó được bảo trì và phát triển bởi Oracle, nhưng cho phép cộng đồng và các công ty khác tham gia vào sự phát triển này, chẳng hạn như Red Hat, Azul Systems, IBM, Apple Inc... OpenJDK vừa là một sản phẩm JDK vừa là một đặc tả (specification), bất kỳ một công ty, tổ chức nào muốn sử dụng OpenJDK để tạo ra một biến thể mới phải tuân thủ các đặc tả đó.
OpenJDK được phát triển bởi Oracle và sự đóng góp từ cộng đồng, đôi khi chúng ta gặp vấn đề với sự ổn định, dựa trên phản hồi của người dùng nó sẽ được nâng cấp để tốt hơn. OpenJDK được cập nhập thường xuyên, khoảng 6 tháng một lần.
Oracle JDK
Oracle JDK được bảo trì và phát triển bởi Oracle, và tuân thủ các đặc tả của OpenJDK, nhưng nó không được mở mã nguồn. Oracle JDK tốt hơn nhiều về khả năng đáp ứng và hiệu năng JVM. Nó tập trung nhiều hơn vào sự ổn định do tầm quan trọng của nó đối với khách hàng doanh nghiệp của mình.
Có thể bạn đặt ra câu hỏi "Thế nào là một đặc tả (specification)?", hãy xem một ví dụ, một tổ chức quy định ra kích thước của một cái lốp xe đạp, đó là một đặc tả, và các nhà sản xuất cần tuân thủ quy định đó, đặc tả không quan tâm làm thế các nhà sản xuất làm ra cái lốp xe.
OpenJDK được phát hành theo giấy phép "GPL v2", trong khi Oracle JDK được phát hành theo "Oracle Binary Code License Agreement".
Java cơ bản
- Tùy biến trình biên dịch java xử lý Annotation của bạn (Annotation Processing Tool)
- Lập trình Java theo nhóm sử dụng Eclipse và SVN
- Hướng dẫn và ví dụ Java WeakReference
- Hướng dẫn và ví dụ Java PhantomReference
- Hướng dẫn nén và giải nén trong Java
- Cấu hình Eclipse để sử dụng JDK thay vì JRE
- Phương thức String.format() và printf() trong Java
- Cú pháp và các tính năng mới trong Java 5
- Cú pháp và các tính năng mới trong Java 8
- Hướng dẫn sử dụng biểu thức chính quy trong Java
- Hướng dẫn lập trình đa luồng trong Java - Java Multithreading
- Thư viện điều khiển các loại cơ sở dữ liệu khác nhau trong Java
- Hướng dẫn sử dụng Java JDBC kết nối cơ sở dữ liệu
- Lấy các giá trị của các cột tự động tăng khi Insert một bản ghi sử dụng JDBC
- Hướng dẫn và ví dụ Java Stream
- Functional Interface trong Java
- Giới thiệu về Raspberry Pi
- Hướng dẫn và ví dụ Java Predicate
- Abstract class và Interface trong Java
- Access modifier trong Java
- Hướng dẫn và ví dụ Java Enum
- Hướng dẫn và ví dụ Java Annotation
- So sánh và sắp xếp trong Java
- Hướng dẫn và ví dụ Java String, StringBuffer và StringBuilder
- Hướng dẫn xử lý ngoại lệ trong Java - Java Exception Handling
- Hướng dẫn và ví dụ Java Generics
- Thao tác với tập tin và thư mục trong Java
- Hướng dẫn và ví dụ Java BiPredicate
- Hướng dẫn và ví dụ Java Consumer
- Hướng dẫn và ví dụ Java BiConsumer
- Bắt đầu với Java cần những gì?
- Lịch sử của Java và sự khác biệt giữa Oracle JDK và OpenJDK
- Cài đặt Java trên Windows
- Cài đặt Java trên Ubuntu
- Cài đặt OpenJDK trên Ubuntu
- Cài đặt Eclipse
- Cài đặt Eclipse trên Ubuntu
- Học nhanh Java cho người mới bắt đầu
- Lịch sử của bit và byte trong khoa học máy tính
- Các kiểu dữ liệu trong Java
- Các toán tử Bitwise
- Câu lệnh rẽ nhánh (if else) trong Java
- Câu lệnh rẽ nhánh switch trong Java
- Vòng lặp trong Java
- Mảng (Array) trong Java
- JDK Javadoc định dạng CHM
- Thừa kế và đa hình trong Java
- Hướng dẫn và ví dụ Java Function
- Hướng dẫn và ví dụ Java BiFunction
- Ví dụ về Java encoding và decoding sử dụng Apache Base64
- Hướng dẫn và ví dụ Java Reflection
- Hướng dẫn gọi phương thức từ xa với Java RMI
- Hướng dẫn lập trình Java Socket
- Các nền tảng nào bạn nên chọn để lập trình ứng dụng Java Desktop?
- Hướng dẫn và ví dụ Java Commons IO
- Hướng dẫn và ví dụ Java Commons Email
- Hướng dẫn và ví dụ Java Commons Logging
- Tìm hiểu về Java System.identityHashCode, Object.hashCode và Object.equals
- Hướng dẫn và ví dụ Java SoftReference
- Hướng dẫn và ví dụ Java Supplier
- Lập trình Java hướng khía cạnh với AspectJ (AOP)
Show More
- Hướng dẫn lập trình Java Servlet/JSP
- Các hướng dẫn Java Collections Framework
- Java API cho HTML & XML
- Các hướng dẫn Java IO
- Các hướng dẫn Java Date Time
- Các hướng dẫn Spring Boot
- Các hướng dẫn Maven
- Các hướng dẫn Gradle
- Các hướng dẫn Java Web Services
- Các hướng dẫn lập trình Java SWT
- Các hướng dẫn lập trình JavaFX
- Các hướng dẫn Java Oracle ADF
- Các hướng dẫn Struts2 Framework
- Các hướng dẫn Spring Cloud