ClassLoader tải file .class vào memory lúc runtime.
3 loại built-in (theo hierarchy):
1. Bootstrap ClassLoader — JVM built-in (C++), tải core class trong java.lang, java.util (rt.jar / Java 9+ module).
2. Platform ClassLoader (Java 9+, trước là Extension) — tải class từ java.base, java.sql, các module platform.
3. Application ClassLoader — tải class từ classpath ứng dụng.
Parent-delegation model: khi nạp class, con hỏi cha trước → đảm bảo core class không bị override (vd java.lang.String luôn từ Bootstrap).
Application ClassLoader
↓ delegate trước khi tự load
Platform ClassLoader
↓
Bootstrap ClassLoaderCustom ClassLoader cho phép:
- Dynamic loading (plugin, OSGi).
- Hot-reloading (Spring DevTools).
- Isolation (mỗi web app trong Tomcat có ClassLoader riêng).
Khi cần hiểu sâu: debug ClassNotFoundException vs NoClassDefFoundError, JAR conflict (cùng class ở 2 JAR), classloader leak trong app server.
A ClassLoader loads .class files into memory at runtime.
Three built-in types (by hierarchy):
1. Bootstrap ClassLoader — JVM built-in (C++), loads core classes in java.lang, java.util (rt.jar / Java 9+ modules).
2. Platform ClassLoader (Java 9+, formerly Extension) — loads java.base, java.sql, platform modules.
3. Application ClassLoader — loads classes from the app classpath.
Parent-delegation model: when loading a class, the child delegates to its parent first → guarantees core classes are not overridden (e.g. java.lang.String always from Bootstrap).
Application ClassLoader
↓ delegates before loading itself
Platform ClassLoader
↓
Bootstrap ClassLoaderCustom ClassLoaders enable:
- Dynamic loading (plugins, OSGi).
- Hot-reloading (Spring DevTools).
- Isolation (each Tomcat web app has its own ClassLoader).
When deep knowledge matters: debugging ClassNotFoundException vs NoClassDefFoundError, JAR conflicts (same class in two JARs), classloader leaks in app servers.