The project website including binaries for download and a bugtracking system can be found at http://ssw.jku.at/dcevm/.
The class data structures of the Java HotSpot virtual machine are immutable during the execution of a program. While new classes can be loaded, it is not possible to change existing classes (e.g. add/remove methods or fields). This projects tries to relax this condition to allow arbitrary changes to existing Java classes (including changes to the class hierarchy) while running a Java program.
Work in progress.
Latest patch update: December 17, 2010
Patch base: jdk7-b118
Full patch (advanced version): hotswap.patch
Patch with VM modifications only and limited feature set: hotswaplight.patch
Please send any comments or questions to: email@example.com
Initial implementation description (April 1, 2009): Thomas Wuerthinger, Dynamic Code Evolution for the Java HotSpotVirtual Machine
For more recent information, see the list of publications.
- Arbitrary changes possible (including changes to subtype relationships)
- No performance penalty before or after the change
- No introduced indirections
- Continued execution of old active methods
- Only simple, comprehensible strategies for field matching or method transitions
- Change possible at any point when the VM is suspended
- Graceful handling of accesses to deleted fields or calls of deleted methods
|Type of Change||Supported?||Possible problems after resume|
|Swap Method Body||yes|
|Remove Method||yes||NoSuchMethodError / none in advanced version|
|Remove Field||yes||NoSuchFieldError / none for static fields in advanced version|
|Remove Supertype||no / yes in advanced version||none, but not always guaranteed to be possible|
Classes can implement a method "void $transformer()".
This method is called on every object whose class was redefined and can therefore be used to initialize the new instances of a class.
Additionally, it is possible to implement a static method "void $staticTransformer()" that will be called on the class only.
- NetBeans support for advanced features such as transformer methods and method forwarding.