Trong Java, Class Loader là một phần của Java Virtual Machine (JVM) chịu trách nhiệm tải các lớp (class) vào bộ nhớ khi chương trình Java chạy. Cơ chế tải lớp này giúp Java đạt được một số tính năng chính như độc lập với nền tảng, bảo mật, và tính modular.
Cách hoạt động của Class Loader:
-
Bootstrap Class Loader: Là class loader cấp cao nhất, chịu trách nhiệm tải các lớp cốt lõi của Java API nằm trong thư viện runtime của Java (rt.jar).
-
Extension Class Loader: Tải các lớp từ các thư viện mở rộng của Java, nằm trong thư mục extensions (jre/lib/ext hoặc bất kỳ thư mục nào được chỉ định bởi hệ thống thuộc tính
java.ext.dirs
). -
System/Application Class Loader: Tải các lớp từ classpath của ứng dụng, bao gồm các lớp được định nghĩa bởi người dùng.
Tính năng của Class Loader:
-
Độc lập với nền tảng: Class loader tải mã byte của lớp vào bộ nhớ mà không quan tâm đến hệ thống nền tảng mà chương trình đang chạy. Điều này giúp Java duy trì tính độc lập với nền tảng.
-
Bảo mật: Class loader giúp bảo vệ ứng dụng Java khỏi mã độc hại bằng cách phân biệt các lớp của ứng dụng với các lớp của Java Core hoặc các lớp được tải từ nguồn không đáng tin cậy.
-
Tính Modular: Cơ chế class loader hỗ trợ việc tải lớp một cách linh hoạt, giúp quản lý và cập nhật phần mềm trở nên dễ dàng hơn.
Cơ chế Delegation Model:
Class loader trong Java tuân theo mô hình ủy quyền (Delegation Model), nghĩa là khi một class loader nhận được yêu cầu tải lớp, nó sẽ chuyển yêu cầu đó lên class loader cha trước khi tự mình cố gắng tải lớp. Quá trình này tiếp tục cho đến khi đạt đến Bootstrap Class Loader. Nếu lớp không được tìm thấy trong quá trình này, các class loader sẽ theo thứ tự ngược lại cố gắng tải lớp đó.
Tùy chỉnh Class Loader:
Java cũng cho phép bạn tạo custom class loader bằng cách kế thừa lớp ClassLoader
. Điều này hữu ích khi bạn muốn mở rộng cơ chế tải lớp mặc định của Java, ví dụ như để tải các lớp từ một nguồn không phải là hệ thống file (như mạng, các tập tin được mã hóa, v.v.).
Class Loader là một khái niệm quan trọng trong Java, góp phần vào sự linh hoạt, bảo mật và độc lập với nền tảng của ngôn ngữ.
Comments