Modern software must evolve in response to changing conditions. In the most widely used programming environments, code is
static and cannot change at runtime. This poses problems for applications that have limited down-time. More support is needed
for dynamic evolution. In this paper we present an approach for supporting dynamic evolution of Java programs. In this approach,
Java programs can evolve by changing their components, namely classes, during their execution. Changes in a class lead to
changes in its instances, thereby allowing evolution of both code and state. The approach promotes compatibility with existing
Java applications, and maintains the security and type safety controls imposed by Java’s dynamic linking mechanism. Experimental
analyses of our implementation indicate that the implementation imposes a moderate performance penalty relative to the unmodified
virtual machine.