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: February 2, 2010
Patch base: jdk7-b81
Patch name: hotswap.patch
Please send any comments or questions to: wuerthinger@ssw.jku.at

Implementation Notes

Initial implementation description (April 1, 2009): Thomas Wuerthinger, Dynamic Code Evolution for the Java HotSpotVirtual Machine

General Design Decisions

Status

Type of Change

Supported?

Possible problems after resume

Swap Method Body

yes

 

Add Method

yes

 

Remove Method

yes

NoSuchMethodError

Add Field

yes

 

Remove Field

yes

NoSuchFieldError

Add Supertype

yes

 

Remove Supertype

yes

possible VM crash

Transformer Methods

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.
Example code:

class A {
  int x;
}
class A' {
  int x;
  int doubleX;

  static void $staticTransformer() {
    System.out.println("Class A has a new version");
  }

  void $transformer() {
    doubleX = 2 * x;
  }
}

Future Work