One of the advantages of Java-in-Java design is that we have zero impedance between user code and system helper code (for example write barriers and allocation sequences). By contrast, in C-based VMs such "helper" code is explicitly defined and often hand-crafted in asm or IR. A long time ago Jikes RVM's write barriers were written in asm.
Currently we do not identify such code at all. It would be good to explicitly identify all helpers. Moreover, it could be very useful to have well defined interfaces to them so that the concrete implementations of the helpers could vary.
For example, we could have org.mmtk.helpers as a package with abstract definitions of the helper methods (following the abstract factory pattern perhaps, as used by org.mmtk.vm). Various concrete instances of the helpers could then be instantiated. In our case, we'd use a Java instance, but if someone were interested, they could write an asm instance or perhaps an IR instance. It may require some refactoring to get these helper methods suitably lean (imagine writing them in asm).
This project will help improve encapsulation and modularity. It will particularly help more clearly delineate user mode and system mode execution, which is pretty clear in a regular VM but rather opaque in Jikes RVM.
It would be great if we could get this done before 3.0. 