B-MJ is a laboratory for Java's reference model. Build a MiniJava program as blocks, then step it on a heap machine to watch references, frames, and garbage collection as they happen.
Its steppers include Call-by-Structure, Call-by-Value, CESK execution, an A-vs-B model comparison, and a substitution rewriter. Workspaces use .bml; MiniJava source can be opened or exported.