Class Loading, Linking, and Initialization

Before a class can be used, the JVM loads its class representation, verifies and prepares it, resolves symbolic references as required, and initializes static state when initialization is triggered.

Class loaders form a delegation hierarchy. Loader identity is part of a class's runtime identity, so the same binary name loaded by different defining loaders represents distinct runtime types.

Class<?> type = Class.forName("java.lang.String");
System.out.println(type.getClassLoader());

This enables plugins and isolation while also creating class-loader leak risks when long-lived references retain unloadable class loaders.

Key Takeaways
  • Loading, linking, and initialization are distinct concepts.
  • Class identity includes the defining class loader.
  • Custom class loaders are powerful but add lifecycle complexity.