This document discusses different techniques for reloading Java classes at runtime:
- HotSwap allows reloading individual statements but is limited. Class loaders allow reloading entire classes but each class loader isolates its classes.
- More advanced techniques like Java agents and bytecode instrumentation allow redefining classes in-place and reloading methods, fields, and class hierarchies in a binary-compatible way.
- Demonstrations show reloading an entire "region" of related classes like a service class and its dependencies, allowing a live application thread to see the changes immediately without restarts. Java agents in particular provide a powerful but complex way to implement class reloading.