Bài 7: Máy ảo Java
1. Giới thiệu chung
Các chương trình dịch của các ngôn ngữ truyền thống như C/C++, Pascal thường dịch các tệp chương trình nguồn sang các câu lệnh đặc biệt mà máy tính của bạn hiểu được.Chu trình phát triển và thực hiện của chương trình viết bằng những ngôn ngữ truyền thống như C/C++ có thể được mô tả như sau:
Tuy nhiên để tối ưu hóa được chương trình dịch thì nó phải được thực hiện dựa trên một kiến trúc (tập các lệnh) xác định, nghĩa là phụ thuộc vào cấu hình của máy tính. Để tạo ra được sự độc lập trường đối thì chương trình của bạn phải dịch lại để phù hợp với kiến trúc mới mỗi khi bạn thay đổi môi trường thực hiện chương trình.
Đặc biệt, mạng Internet được xem như là mạng của nhiều mạng khác nhau về nhiều lĩnh vực, cả phần cứng lẫn phần mềm. Mạng cung cấp nhiều dịch vụ tiện lợi cho nhiều ứng dụng khác nhau, nhất là các ứng dụng trên mạng của công nghệ Web. Để đưa được các yếu tố lập trình lên mạng và kết hợp với web thì không nên sử dụng các chương trình viết bằng C/C++, bởi vì:
- Vấn đề an toàn, an ninh dữ liệu trên mạng không đảm bảo
- Quan trọng là các chương trình C/C++ được dịch sang một mã máy có cấu hình cố định, vì vậy khi được nhạp từ trên mạng xuống một máy có cấu hình khác sẽ không thực hiện được. Ví dụ, một chương trình đã được dịch ở Machintosh thì sẽ không thực hiện được ở Windows và ngược lại
Java vượt qua được các nhược điểm trên bằng cách dịch các chương trình nguồn sang ngôn ngữ máy ảo không phụ thuộc vào chip (hệ lệnh cụ thể) nào cả và sau đó khi cần thực hiện sẽ thông dịch san hệ máy cụ thể. Kết quả của chương trình dịch không phải là mã đích (Object code) như kết quả của các chương trình dịch truyền thống mà là chuỗi bytes cơ sở bao gồm các mã lệnh thực hiện (opcode) và các tham số của máy lý thuyết (máy ảo). Máy này được gọi là máy Java ảo (JVM – Java virtual machine). JVM có thể nhúng vào bất kỳ một biểu diễn, một môi trường cụ thể mà bạn có. Khi cài đặt trên một môi trường xác định (máy có cấu hình có định) thì phần mềm được thông dịch và JVM trở thành máy cụ thể để có thể thực thi ứng dụng của bạn. Chương trình Java được thực hiện như sau:
Công nghệ Java giải quyết vấn đề tốc độ bằng cách dịch chương trình nguồn sang các mã byte (byte codes). Khi JVM thực hiện, nó sẽ tìm các đối tượng cần tham chiếu của các lớp trong chương trình chính (chương trình ứng dụng) ở thời điểm thực hiện để nạp chúng xuống. Quá trình phát triển và thực hiện chương trình Java thực hiện như sau:
Như vậy, Java là ngôn ngữ động không yêu cầu mọi thứ phải sẵn sàng (xác định) ở lúc dịch mà JVM có thể nạp các lớp (các đối tượng) cần thiết (tệp .class) để làm việc khi thực hiện chương trình ứng dụng. Thông thường, mỗi lớp trong chương trình sẽ được dịch sang một tệp có đuôi (phần mở rộng) là .class. Theo cách tổ chức của Java không có sự phụ thuộc giữa các tệp nguồn trong quá trình dịch. Nghĩa là khi các giao diện (mối quan hệ giữa các lớp) chưa bị thay đối thì không cần phải dịch lại các tệp chứa mã nguồn của những lớp được tham chiếu hoặc các lớp tiện ích, trừ khi chính các lớp này bị thay đổi. Chúng ta chỉ phải dịch lại những tệp .java mới hoặc những tệp đã bị thay đổi.
2. Tổ chức các dự án ứng dụng với Java
Các tệp chương trình nguồn Java chỉ chứa đúng một loại là những mô tả về các lớp mà chúng ta đã thiết lập, không có các biến toàn cục, không có hàm mẫu (prototype).
Một số lớp có thể tổ chức thành các gói như là các hệ thống con. Khi một lớp muốn sử dụng những lớp được đặt trong một gói nào đó, ví dụ khi cần sử dụng các lớp để kết nối mạng, chúng ta phải nhập gói chứa chúng là gói java.net vào tệp chứa các lớp ứng dụng.
3. Bộ JDK (Java Developer Kit)
Hiện nay có nhiều môi trường hỗ trợ để phát triển phần mềm với Java như: Visual J++, Symatec’s Cafe, Borland JBuilder, JDK, … Bộ JDK do Sun cung cấp thực hiện dựa chủ yếu trên các lệnh đơn được nhập vào từ các dòng lệnh và khá đơn giản, tiện lợi. JDK được sử dụng phổ biến còn bởi lẽ mọi người có thê dễ đọc được từ Website: https://www.oracle.com/java/technologies. Bộ JDK cung cấp các công cụ và chương trình sau:
javac | Chương trình dịch chuyển mã nguồn sang mã byte |
java | Bộ thông dịch: Thực hiện các ứng dụng độc lập, các tệp tin .class trực tiếp |
appletviewer | Bộ thông dịch: Thực thi các ứng dụng nhúng (java applet) từ tệp tin HTML mà không cần sử dụng trình duyệt như Nestcape hay Internet Explorer, … |
javadoc | Bộ tạo tài liệu dạng HTML từ mã nguồn cùng các chú thích bên trong |
jdk | Bộ gỡ lỗi (java debugger) cho phép thực hiện từng dòng lệnh, đặt điểm dừng, xem giá trị của các biến, … |
javah | Bộ tạo lập header của C và cho phép chương trình C gọi các phương thức (hàm) của Java và ngược lại |
javap | Trình dịch ngược Assembler. Hiển thị các phương thức, dữ liệu truy nhập được bên trong của tệp tin .class đã được dịch và hiển thị nghĩa của byte code. |