Java Virtual Machine
Nội dung trình bày Định
nghĩa về JVM và các khái niệm liên quan Kiến trúc của JVM
Nhóm 12 _ K49CNPM
2/19
Định nghĩa về JVM và các khái niệm liên quan
Máy ảo Java Đặc
tả trừu tượng Một cài đặt cụ thể Một thể hiện thời gian chạy. Tóm lại:Một chương trình Java chạy trên một thể hiện của một cài đặt cụ thể của đặc tả trừu tượng máy ảo Java.
Nhóm 12 _ K49CNPM
3/19
Định nghĩa về JVM và các khái niệm liên quan
Thời gian sống của máy ảo Java Một thể hiện (instance) của JVM được sinh ra khi ứng dụng bắt đầu. Thể hiện bị chết khi ứng dụng kết thúc. Ứng dụng bắt đầu khi nó gọi hàm main() trong một lớp nào đấy của ứng dụng Class echo{ Public static void main(String args[]){ System.out.println(“Hello world”); } }
Nhóm 12 _ K49CNPM
4/19
Kiến trúc của máy ảo java
Các thành phần trong đặc tả của JVM: Kiểu
dữ liệu (data types) Class loader subsystem Các vùng bộ nhớ (Memory areas) Tập chỉ thị (Instructions).
Nhóm 12 _ K49CNPM
5/19
Kiến trúc của máy ảo Java
Nhóm 12 _ K49CNPM
6/19
Các kiểu dữ liệu
Nhóm 12 _ K49CNPM
7/19
Class loader subsystem
Tải (loading): Tìm và tải dữ liệu nhị phân cho mỗi lớp Liên kết:
Xác minh: Kiểm tra tính đúng đắn của lớp Chuẩn bị: Cấp phát bộ nhớ cho các biến, khởi tạo bộ nhớ cho các giá trị mặc định Chuyển đổi: Chuyển tham chiếu biểu tượng thành tham chiếu trực tiếp.
Khởi tạo: Gọi mã Java khởi tạo các biến cho lớp Nhóm 12 _ K49CNPM
8/19
Class loader subsystem (tiếp)
Class loader subsystem gồm 2 loại:
Bootstrap class loader: Tải các lớp của hệ thống và các thư viện lập trình ứng dụng (API). User-define class loader: Nhiệm vụ là tải các lớp do ứng dụng sinh ra Các hàm dùng làm giao diện: Protected final Class defineClass( String name,byte data[], int offset, int length); Protected final Class defineClass(String name, byte data[], int offset, int length, ProtectionDemain protectionDomain); Protected final Class findSystemClass( String name) Protected final void resolveClass( Class C); Nhóm 12 _ K49CNPM
9/19
Các vùng bộ nhớ
Method area: Chứa thông tin của lớp được tải Tên
đầy đủ của lớp Tên đầy đủ của lớp cha trực tiếp của nó Bổ từ truy cập (public, abstract, final) Danh sách có thứ tự tên đầy đủ của các giao diện mà lớp này thực thi.
Nhóm 12 _ K49CNPM
10/19
Các vùng bộ nhớ (tiếp)
Method area (tiếp). Constant
pool (Các đối tượng dùng
chung) Thông tin về các trường của lớp. Thông tin về các phương thức của lớp. Một tham chiếu đến lớp classLoader. Một tham chiếu đến lớp Class. Bảng phương thức.
Nhóm 12 _ K49CNPM
11/19
Các vùng bộ nhớ (tiếp).
Bộ nhớ heap: Khi
một thể hiện (instance) của một đối tượng hoặc một mảng được tạo ra thì bộ nhớ cho chúng được cấp phát trong bộ nhớ heap đơn Tất cả các luồng của ứng dụng đều chia sẻ nó. Chỉ có chỉ lệnh cấp phát bộ nhớ, không có chỉ lệnh giải phóng bộ nhớ. JVM sử dụng bộ thu gom rác để làm gọn bộ nhớ heap. Nhóm 12 _ K49CNPM
12/19
Các vùng bộ nhớ (tiếp) •
Mô tả đối tượng
Nhóm 12 _ K49CNPM
13/19
Các vùng bộ nhớ (tiếp)
Mô tả đối tượng(tiếp).
Nhóm 12 _ K49CNPM
14/19
Các vùng bộ nhớ(tiếp).
Bảng phương thức.
Nhóm 12 _ K49CNPM
15/19
Các vùng bộ nhớ (tiếp).
Biểu diễn mảng.
Nhóm 12 _ K49CNPM
16/19
Ngăn xêp ́ Java Khi luồng mới được tạo ra, ngăn xếp Java cũng được khởi tạo Bao gồm nhiều khung ngăn xếp
push() Pop()
Luồng gọi phương thức: khung ngăn xếp mới được đẩy lên trên đỉnh ngăn xếp Java Nhóm 12 _ K49CNPM
17/19
Khung ngăn xêp ́ (Stack Frame)
Gồm 3 phần Biến
cục bộ Ngăn xếp toán hạng (Operand Stack) Dữ liệu khung ( Frame data)
Kích thước các thành phần : từ (word) Được
lưu trong file class của mỗi phương
thức Kích thước vùng biến cục bộ và ngăn xếp toán hạng được xác định tại compile time Nhóm 12 _ K49CNPM
18/19
Khung ngăn xêp ́ (tiêp…) ́
Vùng biến cục bộ: Mảng
zero-based Tham số của phương thức, biến cục bộ
Operand stack Push(),
pop()
Dữ liệu của khung ( Frame data) Dữ
liệu trỏ tới constant pool Tham chiếu tới bảng ngoại lệ Có thể gồm thông tin về hỗ trợ gỡ lỗi Nhóm 12 _ K49CNPM
19/19
Example : Local Variable
Class Example{
public static int runClassMethod( int I, long l, float f, double d, Object O, byte b) { return
} public int runInstanceMethod( char c, double d, short s, boolean b){ return
0;
0;
}
} Nhóm 12 _ K49CNPM
20/19
Example : Local Variable
Nhóm 12 _ K49CNPM
21/19
Example (cont …)
iload_0 iload_1 iadd istore_2
Nhóm 12 _ K49CNPM
22/19
Ngăn xếp phương thức cơ sở ( Native Method Stack )
Phương thức cơ sở có thể Truy
cập vào vùng dữ liệu thời gian chạy. Sử dụng thanh ghi trong bộ vi xử lý cơ sở
Khi luồng gọi phương thức cơ sở JVM
liên kết trực tiếp tới stack phương thức cơ
sở Gọi trực tiếp phương thức cơ sở này
Nhóm 12 _ K49CNPM
23/19
Native Method stack
Nhóm 12 _ K49CNPM
24/19
Giao diện phương thức cơ sở (Native Method Interface)
Đặc tả JVM không nêu sự bắt buộc của giao diện phương thức cơ sở Một phương thức cơ sở có thể tương tác với trạng thái bên trong của thể hiện JVM ở mức độ nào đó
Truyền vào và trả về dữ liệu Truy cập vào thể hiện của biến, phương thức, đối tượng ... Tải một lớp mới Ném ngoại lệ
Ngoài ra việc thiết kế giao diện cũng yêu cầu một số dịch vụ khá phức tạp. Nhóm 12 _ K49CNPM
25/19
Máy thực thi (Excution Engine)
Là cốt lõi của cài đặt máy ảo Java Tập
chỉ lệnh ( tập trung câu hỏi what, nhưng lại không mô tả chi tiết how ) Có thể sử dụng theo 3 nghĩa: Đặc
tả trừu tượng ( abstract specification) – tập chỉ lệnh ( instruction set) Một cài đặt cụ thể ( concrete implementation) – cài đặt phần cứng, phần mềm hoặc cả hai Thể hiện thời gian chạy ( runtime instance) – luồng ( excution engine in action) Nhóm 12 _ K49CNPM
26/19
Tập lệnh ( Instruction Set) Một chỉ lệnh gồm opcode 1 byte, có thể có (nhiều) hoặc không cần các toán hạng => Xác định các thao tác cần thực hiện Một chỉ lệnh được thực hiện tại một thời điểm
Nạp
opcode Nạp các toán tử cần thiết ( nếu có) Thực thi Nạp chỉ lệnh tiếp theo
Thiết kế tập chỉ lệnh Nhóm 12 _ K49CNPM
27/19
Kĩ thuật thực thi ( execute technique) Các kĩ thuật thực thi: thông dịch, biên dịch, Just-in-time Kĩ thuật: tối ưu hóa thích nghi ( adaptive optimization)
Phiên
dịch tất cả code, tập trung điều chỉnh đoạn mã thực thi Định hình đoạn mã “hot spot” : sử dụng 80-90% thời gian thực thi
Nhóm 12 _ K49CNPM
28/19
Sumary : Java Virtual Machine JVM và một số khái niệm liên quan Kiến trúc:
Class
loader subsystem Method area, heap, java stack, pc register, native method stack Excution engine, một số kĩ thuật thực thi. Native method interface, native method libraries Instruction set Nhóm 12 _ K49CNPM
29/19
Thanks for your attention ! Questions & Answers ???
Nhóm 12 _ K49CNPM
30/19