JVM (Java Virtual Machine) thực hiện việc tải lớp trong những trường hợp cụ thể sau:
I. Khi sử dụng lớp một cách chủ động
- Tạo đối tượng của lớp:
- Khi sử dụng từ khóa
newđể tạo một thể hiện của lớp, JVM đảm bảo rằng lớp đã được tải, liên kết và khởi tạo. - Ví dụ:
Object instance = new Object();
Trong ví dụ này, nếu lớp Object chưa được tải, JVM sẽ thực hiện tải lớp Object khi thực thi câu lệnh này.
2. Gọi phương thức tĩnh:
- Khi gọi một phương thức tĩnh của lớp, JVM sẽ tải lớp trước.
- Ví dụ:
UtilityClass.performCalculation();
Nếu UtilityClass chưa được tải trước đó, JVM sẽ tải UtilityClass khi thực hiện gọi phương thức tĩnh này.
3. Truy cập trường tĩnh:
- Khi truy cập một trường tĩnh của lớp, JVM sẽ tải lớp đó.
- Ví dụ:
int count = DataContainer.totalItems;
Nếu DataContainer chưa được tải, JVM sẽ thực hiện tải lớp khi truy cập trường tĩnh này.
4. Sử dụng cơ chế phản chiếu:
- Khi sử dụng API phản chiếu để truy cập phương thức, trường hoặc constructor của lớp, JVM sẽ tải lớp đó.
- Ví dụ:
Class<?> type = Class.forName("BusinessService");
Câu lệnh này sẽ khiến JVM tải lớp BusinessService.
II. Tải lớp cha khi tải lớp con
- Tải lớp kế thừa:
- Khi một lớp con được tải, JVM sẽ tải lớp cha trước tiên.
- Ví dụ, nếu có lớp
ChildComponentkế thừa từParentComponent, khiChildComponentđược tải màParentComponentchưa được tải, JVM sẽ tảiParentComponenttrước.
- Tải giao diện khi tải lớp triển khai:
- Khi một lớp triển khai giao diện, quá trình tải lớp triển khai sẽ kích hoạt tải giao diện nếu chưa được tải.
- Ví dụ, nếu lớp
DatabaseHandlertriển khai giao diệnDataProcessor, khiDatabaseHandlerđược tải màDataProcessorchưa được tải, JVM sẽ tảiDataProcessortrước.
III. Thông qua các tham số khởi động JVM đặc biệt
-XX:+TraceClassLoading:
- Sử dụng tham số này cho phép JVM in thông tin nhật ký khi tải lớp, giúp lập trình viên quan sát quá trình tải lớp.
- Ví dụ, khi khởi động chương trình Java có thể dùng lệnh sau:
java -XX:+TraceClassLoading ApplicationMain
- Các tham số khác:
- Một số tham số khác của JVM cũng ảnh hưởng đến hành vi tải lớp, ví dụ như
-verbose:classcũng có thể hiển thị thông tin về quá trình tải lớp.
Quá trình tải lớp trong JVM là cơ chế tự động được quản lý nội bộ, xảy ra khi hệ thống cần sử dụng lớp cụ thể. Việc nắm rõ thời điểm tải lớp rất quan trọng để hiểu cơ chế vận hành của chương trình Java và tối ưu hiệu năng.