Tất cả chương trình Java chạy trên Java Virtual Machine (JVM). Sau biên dịch, class Java biến thành bytecode độc lập platform và máy, lưu dưới dạng file .class. Khi cần dùng, ClassLoader nạp class vào bộ nhớ. Class được đưa vào môi trường Java khi được tham chiếu bằng tên. Việc nạp class do class loader thực hiện, khi class bắt đầu chạy, phương thức main() là cách khởi động class đó.
Có một vài thay đổi nhỏ của class loader trong Java 9:
- System class loader không còn là instance của URLClassLoader, mà là class nội bộ. Là default loader cho class trong module.
- Extension class loader đổi tên thành Platform class loader. Tất cả class trong Java SE Platform nhìn thấy qua platform class loader, và class trong module dưới Java Community Process nhưng không thuộc Java SE Platform cũng nhìn thấy qua platform class loader.
- Applications không thể phụ thuộc vào class loader định nghĩa class nào của Java SE Platform do platform class loader định nghĩa, trong khi class khác do bootstrap class loader định nghĩa.
- Nếu code hiện tại tạo class loader với bootstrap class loader làm parent, cần đổi sang dùng platform class loader làm parent.
- Platform class loader không phải instance của URLClassLoader, là class nội bộ.
- Bootstrap class loader là built-in class loader của JVM. Tuy nhiên nó định nghĩa class của các module quan trọng như base. Ứng dụng triển khai với
-Xbootclasspath/ahoặc tạo class loader vớinulllàmparentcó thể cần thay đổi.
Ví dụ
public class ClassLoaderTest {
public static void main(String args[]) {
System.out.println("Class Loader Test");
ClassLoaderTest test = new ClassLoaderTest();
try {
test.showClassLoaders();
} catch (ClassNotFoundException cnfe) {
System.out.println(cnfe.getMessage());
}
}
public void showClassLoaders() throws ClassNotFoundException {
System.out.println("Classloader of this class: " + ClassLoaderTest.class.getClassLoader());
System.out.println("Classloader of Permission: " + java.sql.SQLPermission.class.getClassLoader());
System.out.println("Classloader of LinkedList: " + java.util.LinkedList.class.getClassLoader());
return;
}
}
Kết quả
Class Loader Test Classloader of this class: jdk.internal.loader.ClassLoaders$AppClassLoader@504bae78 Classloader of Permission: jdk.internal.loader.ClassLoaders$PlatformClassLoader@299a06ac Classloader of LinkedList: null