Mikhail Fursov has finished the GC alloc helper inlining, it's
probably time to discuss the inlining for write barrier. Write barrier
is one of the top prioritized candidates for inlining, this is common
in known JVMs, and this is also GCv5's urgent need.
The first version of write barrier code in Java can be something like
this (by following the one for gc_alloc):
public class GCHelper {
static {System.loadLibrary("gc_gen");}
/* NOS (nursery object space) is higher in address than other spaces.
The boundary currently is produced in GC initialization. It can
be a constant in future.*/
public static final Address NOS_BOUNDARY = getNosBoundary();
public static void write_barrier_slot_rem(Address p_slot, Address
p_target) {
/* If the slot is in NOS or the target is not in NOS, we simply return*/
if( p_slot.GE( NOS_BOUNDARY) || p_target.LT( NOS_BOUNDARY) )
return;
/* Otherwise, we need remember it in native code. */
VMHelper.WriteBarrierSlotRem(p_slot, p_target);
}
private static native Address getNosBoundary();
}
How do you think?
Thanks,
xiaofeng