Ngôn ngữ lập trình Java
Java (phiên âm Tiếng Việt: “Gia-va“) là một ngôn ngữ lập trình hướng đối tượng, dựa trên lớp được thiết kế để có càng ít phụ thuộc thực thi càng tốt. Nó là ngôn ngữ lập trình có mục đích chung cho phép các nhà phát triển ứng dụng viết một lần, chạy ở mọi nơi (WORA), nghĩa là mã Java đã biên dịch có thể chạy trên tất cả các nền tảng hỗ trợ Java mà không cần biên dịch lại. Các ứng dụng Java thường được biên dịch thành bytecode có thể chạy trên bất kỳ máy ảo Java (JVM) nào bất kể kiến trúc máy tính bên dưới. Cú pháp của Java tương tự như C và C++, nhưng có ít cơ sở cấp thấp hơn các ngôn ngữ trên. Java runtime cung cấp các khả năng động (chẳng hạn như phản ánh và sửa đổi mã thời gian chạy) thường không có sẵn trong các ngôn ngữ biên dịch truyền thống. Tính đến năm 2019 Java là một trong những ngôn ngữ lập trình phổ biến nhất được sử dụng theo GitHub, đặc biệt cho các ứng dụng web máy khách-máy chủ, với 9 triệu nhà phát triển đã được báo cáo.
Java ban đầu được James Gosling tại Sun Microsystems (sau đó đã được Oracle mua lại) phát triển và được phát hành vào năm 1995 như một thành phần cốt lõi của nền tảng Java của Sun Microsystems. Các trình biên dịch Java, máy ảo và thư viện lớp thực thi gốc và tham chiếu ban đầu được Sun phát hành theo giấy phép độc quyền. Kể từ tháng 5 năm 2007, tuân theo các thông số kỹ thuật của Quy trình Cộng đồng Java, Sun đã cấp phép hầu hết các công nghệ Java của mình theo Giấy phép Công cộng GNU. Oracle cung cấp Máy ảo Java HotSpot của riêng mình, tuy nhiên việc triển khai tham chiếu chính thức là OpenJDK JVM, là phần mềm mã nguồn mở miễn phí và được hầu hết các nhà phát triển sử dụng và là JVM mặc định cho hầu hết các bản phân phối Linux.
Tính đến tháng 9 năm 2020, phiên bản mới nhất là Java 15, với Java 11, một phiên bản hỗ trợ dài hạn (LTS), được phát hành vào 25 tháng 9 năm 2018. Oracle phát hành bản cập nhật miễn phí cho công chúng với phiên bản kế thừa Java 8 LTS vào tháng 1 năm 2019 cho mục đích sử dụng thương mại, mặc dù nếu không nó sẽ vẫn hỗ trợ Java 8 với các bản cập nhật công khai cho mục đích sử dụng cá nhân vô thời hạn. Các nhà cung cấp khác đã bắt đầu cung cấp các bản miễn phí của OpenJDK 8 và 11 mà vẫn đang nhận được bảo mật và các nâng cấp khác.
Oracle (và những công ty khác) khuyên người dùng nên gỡ cài đặt các phiên bản Java đã lỗi thời vì những rủi ro nghiêm trọng do các vấn đề bảo mật chưa được giải quyết. Vì Java 9, 10, 12, 13 và 14 không còn được hỗ trợ, Oracle khuyên người dùng nên chuyển ngay sang phiên bản mới nhất (hiện tại là Java 15) hoặc bản phát hành LTS.
Nguyên tắc
Có 5 mục tiêu chính trong việc xây dựng ngôn ngữ Java:
- Nó phải đơn giản, hướng đối tượng và quen thuộc.
- Nó phải mạnh mẽ và an toàn.
- Nó phải là kiến trúc trung lập và di động.
- Nó phải thực thi với hiệu suất cao.
- Nó phải được thông dịch, phân luồng và động.
Hệ thống thực thi Java JVM và bytecode
Một mục tiêu thiết kế của Java là tính di động, có nghĩa là các chương trình được viết cho nền tảng Java phải chạy tương tự nhau trên bất kỳ sự kết hợp nào giữa phần cứng và hệ điều hành với hỗ trợ thời gian chạy thích hợp. Điều này đạt được bằng cách biên dịch mã ngôn ngữ Java sang một đại diện trung gian được gọi là Java bytecode, thay vì trực tiếp tới mã máy cụ thể về kiến trúc. Các lệnh mã bytecode trong Java tương tự như mã máy, nhưng chúng được thiết kế để thực thi bởi một máy ảo (VM) được viết riêng cho phần cứng máy chủ. Người dùng cuối thường sử dụng Java Runtime Environment (JRE) được cài đặt trên máy của họ cho các ứng dụng Java độc lập hoặc trong trình duyệt web cho các ứng dụng Java.
Các thư viện tiêu chuẩn cung cấp một cách chung để truy cập các tính năng dành riêng cho máy chủ như đồ họa, phân luồng và mạng.
Việc sử dụng bytecode phổ biến làm cho việc chuyển cổng trở nên đơn giản. Tuy nhiên, chi phí của việc thông dịch bytecode thành các lệnh máy làm cho các chương trình được thông dịch hầu như luôn chạy chậm hơn các chương trình thực thi gốc. Các trình biên dịch Just-in-time (JIT) biên dịch mã byte thành mã máy trong thời gian chạy đã được giới thiệu từ giai đoạn đầu. Bản thân Java độc lập với nền tảng và được điều chỉnh cho phù hợp với nền tảng cụ thể mà máy ảo Java (JVM) chạy trên nó, máy này sẽ dịch mã bytecode của Java sang ngôn ngữ máy của nền tảng.
Hiệu suất
Các chương trình được viết bằng Java nổi tiếng là chậm hơn và đòi hỏi nhiều bộ nhớ hơn các chương trình được viết bằng C++. Tuy nhiên, tốc độ thực thi của các chương trình Java được cải thiện đáng kể với sự ra đời của tính năng biên dịch đúng lúc vào năm 1997/1998 cho Java 1.1, việc bổ sung các tính năng ngôn ngữ hỗ trợ phân tích mã tốt hơn (chẳng hạn như các lớp bên trong, lớp StringBuilder, các xác nhận tùy chọn, v.v.) và tối ưu hóa trong máy ảo Java, chẳng hạn như HotSpot trở thành mặc định cho JVM của Sun vào năm 2000. Với Java 1.5, hiệu suất đã được cải thiện với việc bổ sung gói java.util.concurrent, bao gồm khóa các triển khai miễn phí của ConcurrentMaps và các bộ sưu tập đa lõi khác và nó đã được cải thiện hơn nữa với Java 1.6.
Không JVM
Một số nền tảng cung cấp hỗ trợ phần cứng trực tiếp cho Java; có những bộ điều khiển vi mô có thể chạy Java bytecode trong phần cứng thay vì máy ảo Java phần mềm, và một số bộ xử lý dựa trên ARM có thể có hỗ trợ phần cứng để thực thi Java bytecode thông qua tùy chọn Jazelle của chúng, mặc dù hỗ trợ hầu hết đã bị loại bỏ trong các triển khai hiện tại của ARM.