A scheme has been developed that enables a Java program to be migrated across computers while preserving its execution state,
such as the values of local variables and the dynamic extents of try-and-catch blocks. This scheme provides the programmer
with exible control of migration, including transparent migration. It is based on source-code-level transformation. The translator
takes as input code a Java program written in a Java language extended with language constructs for migration, and outputs
pure Java source code that uses JavaRMI. The translated code can run on any Java interpreter and can be compiled by any just-in-time
compiler.We have measured some execution performance for several application programs, and found that the translated programs
are only about 20% slower than the original programs. Because migration is completely controlled by using only three language
constructs added to the Java language (go, undock and migratory), the programmer can write programs to be migrated easily and succinctly. Our system is available in the public domain.