Tải bản đầy đủ (.doc) (10 trang)

Tổng quan về máy ảo java

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (156.95 KB, 10 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
TIỂU LUẬN MÔN
NGÔN NGỮ LẬP TRÌNH
MÁY ẢO JAVA (JVM-Java Virtual Machine)
Lời nói đầu
Ngày nay công nghệ thông tin đã có những bước tiến vượt bậc. Lập trình máy tính
điện tử, viết nên các chương trình ứng dụng đang ngày một gần gũi với con người. Điều
đó tạo nên sự phát triển mạnh mẽ của các ngôn ngữ lập trình.
Với sự phát triển như vũ bão của mạng Internet, rất nhiều các chương trình ứng dụng đã
được viết ra nhằm đáp ứng các yêu cầu về giải trí cũng như công việc cho người sử dụng.
Tuy nhiên với môi trường Internet, sẽ có vô vàn các hệ điều hành khác nhau cùng truy
cập một ứng dụng, vậy làm thế nào để một ứng dụng có thể chạy được trên tất cả mọi hệ
điều hành, điều đó đã dẫn đến việc ra đời các ngôn ngữ lập trình không phụ thuộc hệ điều
hành.
Một trong các ngôn ngữ đó là Java.
Với sự phát triển mạnh mẽ của ngôn ngữ Java đối với các ứng dụng trên Internet, việc
tìm hiểu và học hỏi ngôn ngữ Java là hết sức cần thiết. Muốn hiểu sâu và học hỏi ngôn
ngữ Java, cần nắm bắt hạch tâm của ngôn ngữ đó. Một trong các hạch tâm của ngôn ngữ
Java là Máy ảo Java (JVM_ Java Virtual Machine) Với nhu cầu đó, em đã chọn đề tài
tiểu luận "tìm hiểu máy ảo Java_ JVM". Tuy đã rất cố gắng nhưng do
thời gian có hạn, báo cáo của em không tránh khỏi những thiếu sót.
Em xin chân thành cảm ơn thầy Nguyễn Hữu Đức đã tạo điều kiện và giúp
đỡ em hoàn thành tiểu luận này.
MỤC LỤC
1 Tổng quan về máy ảo Java (JVM-Java Virtual Machine) 4
1.1 Giới thiệu về JVM 4
1.2 Máy ảo Java là gì? 5
2 Phương thức thực thi 6
2.1 Quản lý bộ nhớ và dọn rác 6
2.2 Quá trình kiểm tra file .class 7
3 Các kiểu dữ liệu được hỗ trợ trong JVM 7


3.1 Kiểu dữ liệu nguyên thủy 8
3.2 Kiểu dữ liệu tham chiếu 9
4 Tổng kết 10
1 Tổng quan về máy ảo Java (JVM-Java Virtual
Machine)
1.1 Giới thiệu về JVM
Thập kỷ 90 chứng kiến một sự phát triển như vũ bão của mạng Internet, kèm theo đó
là vô vàn các ứng dụng trên các môi trường, hệ điều hành (OS) và các hệ xử lý (CPU)
khác nhau. Tuy nhiên có một điểm hạn chế lớn là người lập trình phải rất vất vả khi
chuyển đổi các ứng dụng của mình để các hệ thống khác có thể sử dụng được.
Ngày 23/5/1995, công ty máy tính Sun Microsystems đã giới thiệu một công cụ lập
trình mới - ngôn ngữ Java - nhằm khắc phục những khó khăn đó. Đặc điểm nổi bật
nhất của Java là nó không phụ thuộc vào hệ điều hành và bộ xử lý. Điều này cho phép
một ứng dụng viết bằng Java có thể được thực hiện trên bất kỳ hệ điều hành và hệ xử
lý nào có hỗ trợ Java. Do vậy, người lập trình chỉ cần viết ứng dụng bằng Java đúng
một lần, sau đó có thể sử dụng ứng dụng này trên các hệ điều hành khác nhau như
Windows95, WindowsNT, Mac OS, Unix, theo phương châm: viết một lần, sử dụng
ở bất kỳ đâu.
Có thể định nghĩa một cách chính xác hơn về Java: là ngôn ngữ lập trình hướng đối
tượng, được thiết kế độc lập với hệ điều hành, cho phép người lập trình viết chương
trình một lần và có thể sử dụng tại bất kỳ đâu.
Không chỉ giới thiệu ngôn ngữ lập trình, Sun Microsystems còn đưa ra hàng loạt công
cụ hỗ trợ người lập trình phát triển các ứng dụng bằng Java, như Java Developer Kit,
JavaBeans, HotJava
Ngôn ngữ Java có cú pháp rất giống với ngôn ngữ C/C++ (là một ngôn ngữ rất mạnh
được dùng phổ biến hiện nay), tuy nhiên nó đã được thay đổi khá nhiều để đáp ứng
khả năng độc lập với hệ điều hành. Nền tảng của ngôn ngữ Java là các class. Các
class đóng vai trò như những đối tượng, người lập trình khi xây dựng ứng dụng sẽ sử
dụng một số class chuẩn của hệ thống, đồng thời có thể tự mình xây dựng class khác
đáp ứng yêu cầu công việc.

Java là ngôn ngữ dễ học, nó lược bớt những lệnh thừa và rườm rà của C/C++ để
người lập trình chú trọng vào việc viết chương trình. Đồng thời, nó còn hạn chế người
lập trình không can thiệp quá sâu vào hệ thống.
Hiện nay Java được ứng dụng rất rộng rãi, chủ yếu là các ứng dụng được viết trên
Internet nhằm khai thác tối đa khả năng của nó trong lĩnh vực viễn thông, truyền hình,
mạng, và các máy tính đơn lẻ. Hiện tại các ứng dụng viết bằng Java khi thực hiện còn
chậm hơn so với các ứng dụng được xây dựng thông thường, tuy nhiên hầu hết các
nhà phát triển phần mềm đều cho rằng tốc độ sẽ được cải thiện và Java sẽ là ngôn ngữ
lập trình của tương lai.
Máy ảo Java là trái tim của ngôn ngữ Java. Môi trường Java bao gồm năm phần tử
sau:
- Ngôn ngữ
- Định nghĩa Bytecode
- Các thư viện lớp Java/Sun
- Máy ảo java JVM
- Cấu trúc của file . class
Các phần tử tạo cho Java thành công là
- Định nghĩa Bytecode
- Cấu trúc của file .class
- Máy ảo Java
Java Virtual Machine (JVM) đóng vai trò rất quan trọng để các ứng dụng Java có thể
thực hiện được. Nó hoạt động như một máy tính ảo, cũng có bộ lệnh, cấu trúc dữ liệu,
bộ nhớ, Khi các ứng dụng Java (sau khi dịch, các ứng dụng viết bằng Java sẽ có
phần mở rộng là class) thực hiện, JVM tiến hành phân tích mã trong class đó thành bộ
lệnh của JVM rồi thực hiện giống như máy tính PC thao tác với các ứng dụng thông
thường.
Khả năng cơ động của file.class cho phép các chương trình Java viết một lần nhưng
chạy ở bất kỳ đâu.Bởi vậy, các class sau khi dịch có thể được thực hiện trên bất kỳ hệ
điều hành nào thông qua máy tính ảo JVM.
Khả năng này có được nhờ sự giúp đỡ của Máy ảo java JVM. Hiện tại, JVM được

xây dựng cho hầu hết các hệ điều hành và hệ xử lý hiện có, điều này có nghĩa là các
ứng dụng viết bằng Java có đầy đủ điều kiện để phát triển.
1.2 Máy ảo Java là gì?
Như đã biết, JVM bản chất là một chương trình có thể thực thi các đoạn mã lập trình
của Java, và đặc điểm của những chương trình viết bằng Java là đều có thể chạy trên
bất kỳ môi trường nào, miễn là có cài máy ảo JVM trên đó. Việc này sẽ tạo một động
lực rất lớn thúc đẩy việc dùng lại các phần mềm Java đã được viết trước đây và việc
phát triển phần mềm trên iPhone và iTouch.
Máy ảo là một phần mềm dựa trên cơ sở máy tính ảo. Nó có tập hợp các lệnh logic để
xác định các hoạt động của máy tính. Người ta có thể xem nó như một hệ điều hành
thu nhỏ. Nó thiết lập các lớp trừu tượng cho: Phần cứng bên dưới,hệ điều hành,mã đã
biên dịch.
Trình biên dịch chuyển mã nguồn thành tập các lệnh của máy ảo mà không phụ thuộc
vào phần cứng cụ thể. Trình thông dịch trên mỗi máy sẽ chuyển tập lệnh này thành
chương trình thực thi. Máy ảo tạo ra một môi trường bên trong để thực thi các lệnh
bằng cách:
- Nạp các file.class
- Quản lý bộ nhớ
- Dọn "rác"
Việc không nhất quán của phần cứng làm cho máy ảo phải sử dụng ngăn xếp để lưu
trữ các thông tin sau:
- Các "Frame" chứa các trạng thái của các phương pháp.
- Các toán hạng của mã bytecode
- Các tham số truyền cho phương pháp
- Các biến cục bộ
Khi JVM thực thi mã, một thanh ghi cục bộ có tên "Program Counter" được sủ dụng.
Thanh ghi này trỏ tới lệnh đang thực hiện. Khi cần thiết, có thể thay đổi nội dung
thanh ghi để đổi hướng thực thi của chương trình. Trong trường hợp thông thường thì
từng lệnh một nối tiếp nhau sẽ được thực thi.
Một khái niệm thông dụng khác trong Java là trình biên dịch "Just In Time-JIT". Các

trình duyệt thông dụng như Netscape hay IE đều có JIT bên trong để tăng tốc độ thực
thi chương trình Java. Mục đích chính của JIT là chuyển tập lệnh bytecode thành mã
máy cụ thể cho từng loại CPU. Các lệnh này sẽ được lưu trữ và sử dụng mỗi khi gọi
đến.
2 Phương thức thực thi
2.1 Quản lý bộ nhớ và dọn rác
Trong C, C++ hay Pascal người lập trình sử dụng phương pháp nguyên thủy để cấp
phát và thu hồi bộ nhớ ở vùng " Heap". Heap là vùng bộ nhớ lớn được phân chia
cho tất cả các Thread.
Để quản lý Heap, bộ nhớ được theo dõi qua các danh sách sau:
- Danh sách các vùng nhớ rảnh chưa cấp phát.
- Danh sách các vùng đã cấp
Khi có một yêu cầu về cấp phát bộ nhớ, hệ thống kiểm tra xem xét trong danh sách
chưa cấp phát để lấy ra khối bộ nhớ đầu tiên có kích cỡ sát nhất. Chiến thuật cấp
phát này giảm tối thiểu việc phân mảnh của Heap.
"Coalescing" là kỹ thuật khác cũng giảm thiểu việc phân mảnh của Heap bằng cách
gom lại các vùng nhớ chưa dùng liền nhau. Còn kỹ thuật sắp xếp lại các phần đã
dùng để tạo vùng nhớ lớn hơn gọi là "Compaction"
Java sử dụng hai Heap riêng biệt cho cấp phát vùng nhớ tĩnh và vùng nhớ động.
Một Heap(Heap tĩnh) chứa các định nghĩa về lớp, các hằng và danh sách các
phương pháp. Heap còn lại(Heap động) được chia làm hai phần được cấp phát theo
hai chiều ngược nhau. Một bên chứa đối tượng còn bên kia chứa con trỏ trỏ đến đối
tượng đó.
"Handle" là cấu trúc bao gồm hai con trỏ. Một trỏ đến bảng phương pháp của đối
tượng, con trỏ thứ hai trỏ đến chính đối tượng đó. Chú ý rằng khi "compaction" cần
cập nhập lại giá trị con trỏ của cấu trúc" Handle". Thuật toán dọn rác có thể áp
dụng cho các đối tượng đặt trong Heap động. Khi có yêu cầu về bộ nhớ, trình quản
lý Heap trước tiên kiểm tra danh sách bộ nhớ chưa cấp phát. Nếu không tìm thấy
khối bộ nhớ nào phù hợp(về kích cỡ) thì trình dọn rác sẽ được kịch hoạt khi hệ
thống rảnh. Nhưng khi đòi hỏi bộ nhớ cấp bách thì trình dọn rác sẽ được kích hoạt

ngay.
Trình dọn rác gọi hàm Finalize trước khi dọn dẹp đối tượng. Hàm này sẽ dọn dẹp
các tài nguyên bên ngoài như các file đang mở. Công việc này không được trình
dọn rác thực thi.
2.2 Quá trình kiểm tra file .class
Việc kiểm tra được áp dụng cho tất cả các file .class sắp được nạp lên bộ nhớ để
đảm bảo tính an toàn.
Trình "Class Loader" sẽ kiểm tra tất cả các file .class không phụ thuộc hệ điều hành
với mục đích giám sát sự tuân thủ các nghi thức để phát hiện các file ,class có nguy
cơ gây hư hỏng đến bộ nhớ, hệ thống file cục bộ, mạng hoặc hệ điều hành. Quá
trình kiểm tra sẽ xem xét đến tính toàn vẹn toàn cục của lớp.
File .class bao gồm ba phần logic là:
- Byecode
- Thông tin về Class như phương pháp, giao diện và các giá trị được tập hợp trong
quá trình biên dịch.
- Các thuộc tính về lớp.
Các thông tin của file . class được xem xét riêng rẽ trong các bảng như sau:
- Bảng file chứa các thuộc tính
- Bảng Method chứa các hàm của class
- Bảng Interface chứa các giao diện và các hằng số
Quá trình kiểm tra file .class được thực hiện ở bốn mức:
• Mức đầu tiên thực hiện việc kiểm tra cú pháp để đảm bảo tính cấu trúc và tính
toàn vẹn cú pháp của file .class được nạp
• Mức thứ hai sẽ xem xét file.class để đảm bảo các file này không vi phạm các
nguyên tắc về sự nhất quán ngữ nghĩa.
• Mức thứ ba sẽ kiểm tra bytecode. Trong bước này các thông tin so sánh sẽ là
số thông số truyền của hàm, khả năng truy xuất sai chỉ số của mảng, chuỗi,
biểu thức.
• Mức thứ tư sẽ kiểm tra trong thời gian thực thi để giám sát các việc còn lại mà
ba bước trên chưa làm. Ví dụ như liên kết tới các lớp khác trong khi thực thi,

hay kiểm tra quyền truy xuất. Nếu mọi điều thỏa mãn, lớp sẽ được khởi tạo.
3 Các kiểu dữ liệu được hỗ trợ trong JVM
Trong JVM hỗ trợ 2 loại kiểu dữ liệu, đó là
• Kiểu dữ liệu nguyên thủy (primitive)
• Kiểu dữ liệu tham chiếu(references)
3.1 Kiểu dữ liệu nguyên thủy
Các kiểu dữ liệu nguyên thủy mà JVM hỗ trợ bao gồm: Các kiểu số (numeric
types), kiểu logic (boolean type), và các kiểu địa chỉ trả về (returnAddress type).
Kiểu số bao gồm các kiểu số nguyên và các kiểu số phẩy động.
Kiểu số nguyên gồm
• byte (gồm 8 bit)
• short (gồm 16 bit)
• int (gồm 32 bit)
• long (gồm 64 bit)
• char (gồm 16 bit)
Kiểu số phẩy động bao gồm
• Float
• Double
Kiểu logic (boolean type) thì chỉ bao gồm 2 giá trị Đúng (True) hoặc Sai (False)
Kiểu địa chỉ trả về chính là một loại con trỏ lệnh trong JVM, được sử dụng để trỏ
tới một lệnh trong chương trình Java và không thể thay đổi trong khi chạy chương
trình
Bảng mô tả các kiểu dữ liệu nguyên thủy như sau
Kiểu dữ
liệu
Độ
dài
theo
số bít
Phạm vi Mô tả

Byte 8 -128 đến +127 Số liệu kiểu byte là một loại điển
hình dùng để lưu trữ một giá trị bằng
một byte. Chúng được sử dụng rộng
rãi khi xử lý một file văn bản
Short 16 -32768 đến +32767 Kiểu Short thường được dùng để lưu
các số có giá trị nhỏ dưới 32767
Int 32 -2147483648 đến
+2147483648
Kiểu Int thường được dùng để lưu
một số có giá trị lớn đến
2147483648
Long 64 -9223372036854775808 đến
+9223372036854775808
Kiểu Long thường được sử dụng để
lưu một số có giá trị rất lớn
Char 16 0 đến 65355 Kiểu char sử dụng để lưu tên hoặc
các dữ liệu ký tự
Boolean 1 "True" hoặc "False" Kiểu Boolean thường dùng để lưu
các giá trị đúng hoặc sai
Float 32 -340292347E+38 đến
+340292347E+38
Kiểu Float thường dùng để lưu các
số thập phân đến 340292347E+38
Double 64 -179769313486231570E+308
đến
+179769313486231570E+30
8
Kiểu Double thường dùng để lưu
các số thập phân có giá trị lớn đến
+179769313486231570E+308

3.2 Kiểu dữ liệu tham chiếu
JVM hỗ trợ 3 kiểu dữ liệu tham chiếu : Mảng (array types), Lớp(class types) và Giao
diện(interface types)
Bảng mô tả các kiểu dữ liệu tham chiếu như sau
Kiểu dữ liệu Mô tả
Mảng (array types) Tập hợp các dữ liệu cùng một loại: Ví dụ
Tên sinh viên
Lớp(class types) Tập hợp các biến và các phương thức. Ví
dụ: Lớp"Sinh Viên" chứa toàn bộ các chi
tiết của một sinh viên và các phương thức
thực thi trên các chi tiết đó
Giao diện(interface types) Là một lớp trừu tượng được tạo ra để bổ
sung cho các kế thừa đa lớp trong Java
4 Tổng kết
Có thể nói rằng sự ra đời của Java đánh dấu một cuộc cách mạng mới trong lĩnh vực
Công Nghệ Thông Tin. Cuộc cách mạng này kéo theo một loạt những thay đổi: các ứng
dụng dần được thay thế bằng Java, các thế hệ máy tính sử dụng những vi mạch có khả
năng hỗ trợ Java, Làm quen với Java sẽ giúp chúng ta tiếp cận được với những công
nghệ mới nhất của Công Nghệ Thông Tin.
Hiện nay trên thế giới có hơn 6 triệu lập trình viên Java, và theo thông báo chính thức của
Sun, thì có hơn 10.000 người trong số đó tập trung phát triển các ứng dụng trên các thiết
bị di động.
Chạy chương trình Java trên JVM vẫn còn chậm hơn một chút so với chạy chương trình
viết thẳng cho hệ máy đó. Tuy nhiên, công nghệ JVM đang tiến bộ mau chóng về mặt tốc
độ và khoảng cách sẽ được thu ngắn lại rất nhiều trước cuối năm nay. Symatec và
Microsoft đã bán ra rất đúng lúc các trình biên dịch và Sun sẽ tung ra HotSpot VM trong
quý 4 năm 1997. Với sự kết hợp này, người ta mong đợi chương trình Java sẽ chạy
nahanh như các trình viết bằng C. Các hãng phần mềm coi hướng phát triển bằng JVM là
rất hấp dẫn vì họ có thể đẩy các chương trình Java chạy trên mọi hệ máy. Chỉ cần họ viết
một JVM cho hệ máy đó. Cho đến nay, đã có JVM cho rất nhiều hệ máy, từ máy tính lớn

(mainframe) đến hầu hết tất cả các kiểu máy để bàn kể cả PC và Mac.

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×