The Evolving Philosophers Problem: Dynamic Change Management
IEEE Transactions on Software Engineering
On dynamically updating a computer program: from concept to prototype
Journal of Systems and Software - Special issue on software maintenance
CLOS: integrating object-oriented and functional programming
Communications of the ACM - Special issue on LISP
Debugging optimized code with dynamic deoptimization
PLDI '92 Proceedings of the ACM SIGPLAN 1992 conference on Programming language design and implementation
On line software version change using state transfer between processes
Software—Practice & Experience
A Formal Framework for On-line Software Version Change
IEEE Transactions on Software Engineering
Managing class evolution in object-oriented systems
Object-oriented software composition
Garbage collection: algorithms for automatic dynamic memory management
Garbage collection: algorithms for automatic dynamic memory management
Type-based hot swapping of running modules (extended abstract)
Proceedings of the sixth ACM SIGPLAN international conference on Functional programming
Java Virtual Machine Specification
Java Virtual Machine Specification
Runtime Support for Type-Safe Dynamic Java Classes
ECOOP '00 Proceedings of the 14th European Conference on Object-Oriented Programming
Supporting Unanticipated Dynamic Adaptation of Application Behaviour
ECOOP '02 Proceedings of the 16th European Conference on Object-Oriented Programming
Evolutionary Data Conversion in the PJama Persistent Language
Proceedings of the Workshop on Object-Oriented Technology
Adapting Applications on the Fly
Proceedings of the 17th IEEE international conference on Automated software engineering
Analysing Dynamic Change in Software Architectures: A Case Study
CDS '98 Proceedings of the International Conference on Configurable Distributed Systems
How to design a system in which modules can be changed on the fly
ICSE '76 Proceedings of the 2nd international conference on Software engineering
DYMOS: A dynamic modification system
SIGSOFT '83 Proceedings of the ACM SIGSOFT/SIGPLAN software engineering symposium on High-level debugging
Generation Scavenging: A non-disruptive high performance storage reclamation algorithm
SDE 1 Proceedings of the first ACM SIGSOFT/SIGPLAN software engineering symposium on Practical software development environments
A Technique for Dynamic Updating of Java Software
ICSM '02 Proceedings of the International Conference on Software Maintenance (ICSM'02)
A Classification of Unanticipated Runtime Software Changes in Java
ICSM '03 Proceedings of the International Conference on Software Maintenance
A Framework for Evolutionary, Dynamically Updatable, Component-Based Systems
ICDCSW '04 Proceedings of the 24th International Conference on Distributed Computing Systems Workshops - W7: EC (ICDCSW'04) - Volume 7
Java(TM) Language Specification, The (3rd Edition) (Java (Addison-Wesley))
Java(TM) Language Specification, The (3rd Edition) (Java (Addison-Wesley))
ACM Transactions on Programming Languages and Systems (TOPLAS)
Practical dynamic software updating for C
Proceedings of the 2006 ACM SIGPLAN conference on Programming language design and implementation
The DaCapo benchmarks: java benchmarking development and analysis
Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
An alternative to Quiescence: Tranquility
ICSM '06 Proceedings of the 22nd IEEE International Conference on Software Maintenance
Mutatis Mutandis: Safe and predictable dynamic software updating
ACM Transactions on Programming Languages and Systems (TOPLAS)
The java hotspotTM server compiler
JVM'01 Proceedings of the 2001 Symposium on JavaTM Virtual Machine Research and Technology Symposium - Volume 1
Dynamic C++ classes: a lightweight mechanism to update code in a running program
ATEC '98 Proceedings of the annual conference on USENIX Annual Technical Conference
Design of the Java HotSpot™ client compiler for Java 6
ACM Transactions on Architecture and Code Optimization (TACO)
Towards Unanticipated Runtime Adaptation of Java Applications
APSEC '08 Proceedings of the 2008 15th Asia-Pacific Software Engineering Conference
Dynamic software updates: a VM-centric approach
Proceedings of the 2009 ACM SIGPLAN conference on Programming language design and implementation
Towards a dynamic-update-enabled JVM
Proceedings of the Workshop on AOP and Meta-Data for Software Evolution
HotWave: creating adaptive tools with dynamic aspect-oriented programming in Java
GPCE '09 Proceedings of the eighth international conference on Generative programming and component engineering
Dynamic code evolution for Java
Proceedings of the 8th International Conference on the Principles and Practice of Programming in Java
GPCE '10 Proceedings of the ninth international conference on Generative programming and component engineering
Proceedings of the 7th Workshop on Reflection, AOP and Meta-Data for Software Evolution
Incremental dynamic updates with first-class contexts
TOOLS'12 Proceedings of the 50th international conference on Objects, Models, Components, Patterns
Proceedings of the Eighth International Workshop on Variability Modelling of Software-Intensive Systems
Hi-index | 0.00 |
Dynamic code evolution is a technique to update a program while it is running. In an object-oriented language such as Java, this can be seen as replacing a set of classes by new versions. We modified an existing high-performance virtual machine to allow arbitrary changes to the definition of loaded classes. Besides adding and deleting fields and methods, we also allow any kind of changes to the class and interface hierarchy. Our approach focuses on increasing developer productivity during debugging, but can also be applied for updating of long-running applications. Changes can be applied at any point at which a Java program can be suspended. Our virtual machine is able to continue execution of old changed or deleted methods and also to access deleted static fields. A dynamic verification of the current state of the program ensures type safety of complex class hierarchy changes. However, the programmer still has to ensure that the semantics of the modified program are correct and that the new program version can start running from the state left behind by the old program version. The evaluation section shows that our modifications to the virtual machine have no negative performance impact on normal program execution. The in-place instance update algorithm is in many cases faster than a full garbage collection. Standard Java development environments automatically use the code evolution features of our modified virtual machine, so no additional tools are required.