Update of /cvsroot/jikesrvm/MMTk/src/org/mmtk/plan/nogc In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27375/src/org/mmtk/plan/nogc Modified Files: NoGC.java NoGCConstraints.java NoGCTraceLocal.java Added Files: NoGCMutator.java NoGCCollector.java Removed Files: NoGCLocal.java Log Message: Refactored "locals" into MutatorContexts and CollectorContexts. This means MMTk no longer assumes the Jikes RVM threading model. Aside from making matters clearer, a nice side-effect was the removel of the whole concept of "non-participating". A consequence of this refactoring is that MutatorContexts remain embedded in the VM_Processor, but CollectorContexts are now an indirection away. I checked the performance implication of this pretty thoroughly and found no measurable change in performance. I made a bunch of other minor cleanups. --- NEW FILE: NoGCMutator.java --- /* * (C) Copyright Department of Computer Science, * Australian National University. 2005 */ package org.mmtk.plan.nogc; import org.mmtk.plan.MutatorContext; import org.mmtk.policy.ImmortalLocal; import org.mmtk.policy.Space; import org.mmtk.utility.alloc.Allocator; import org.mmtk.vm.Assert; import org.vmmagic.pragma.*; import org.vmmagic.unboxed.*; /** * This class implements <i>per-mutator thread</i> behavior and state * for the <i>NoGC</i> plan, which simply allocates (without ever collecting * until the available space is exhausted.<p> * * Specifically, this class defines <i>NoGC</i> mutator-time allocation * through a bump pointer (<code>def</code>) and includes stubs for * per-mutator thread collection semantics (since there is no collection * in this plan, these remain just stubs). * * @see NoGC * @see NoGCCollector * @see StopTheWorldMutator * @see MutatorContext * @see SimplePhase#delegatePhase * * $Id: NoGCMutator.java,v 1.1 2006/06/19 06:08:16 steveb-oss Exp $ * * @author Steve Blackburn * @author Daniel Frampton * @author Robin Garner * @version $Revision: 1.1 $ * @date $Date: 2006/06/19 06:08:16 $ */ public class NoGCMutator extends MutatorContext implements Uninterruptible { /************************************************************************ * Instance fields */ private final ImmortalLocal def; // the default allocator /************************************************************************ * * Initialization */ /** * Constructor. One instance is created per physical processor. */ public NoGCMutator() { def = new ImmortalLocal(NoGC.defSpace); } /**************************************************************************** * * Mutator-time allocation */ /** * Allocate memory for an object. * * @param bytes The number of bytes required for the object. * @param align Required alignment for the object. * @param offset Offset associated with the alignment. * @param allocator The allocator associated with this request. * @return The address of the newly allocated memory. */ public Address alloc(int bytes, int align, int offset, int allocator) throws InlinePragma { if (allocator == NoGC.ALLOC_DEFAULT) { return def.alloc(bytes, align, offset); } return super.alloc(bytes, align, offset, allocator); } /** * Perform post-allocation actions. For many allocators none are * required. * * @param ref The newly allocated object * @param typeRef the type reference for the instance being created * @param bytes The size of the space to be allocated (in bytes) * @param allocator The allocator number to be used for this allocation */ public void postAlloc(ObjectReference ref, ObjectReference typeRef, int bytes, int allocator) throws InlinePragma { if (allocator != NoGC.ALLOC_DEFAULT) { super.postAlloc(ref, typeRef, bytes, allocator); } } /** * Return the space into which an allocator is allocating. This * particular method will match against those spaces defined at this * level of the class hierarchy. Subclasses must deal with spaces * they define and refer to superclasses appropriately. * * @param a An allocator * @return The space into which <code>a</code> is allocating, or * <code>null</code> if there is no space associated with * <code>a</code>. */ public Space getSpaceFromAllocator(Allocator a) { if (a == def) return NoGC.defSpace; // a does not belong to this plan instance return super.getSpaceFromAllocator(a); } /** * Return the allocator instance associated with a space * <code>space</code>, for this plan instance. * * @param space The space for which the allocator instance is desired. * @return The allocator instance associated with this plan instance * which is allocating into <code>space</code>, or <code>null</code> * if no appropriate allocator can be established. */ public Allocator getAllocatorFromSpace(Space space) { if (space == NoGC.defSpace) return def; return super.getAllocatorFromSpace(space); } /**************************************************************************** * * Collection */ /** * Perform a per-mutator collection phase. * * @param phaseId The collection phase to perform * @param participating Is this thread participating in collection * (as opposed to blocked in a JNI call) * @param primary perform any single-threaded local activities. */ public final void collectionPhase(int phaseId, boolean participating, boolean primary) { Assert.fail("GC Triggered in NoGC Plan."); /* if (phaseId == NoGC.PREPARE_MUTATOR) { } if (phaseId == NoGC.RELEASE_MUTATOR) { } super.collectionPhase(phaseId, participating, primary); */ } } Index: NoGCTraceLocal.java =================================================================== RCS file: /cvsroot/jikesrvm/MMTk/src/org/mmtk/plan/nogc/NoGCTraceLocal.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** NoGCTraceLocal.java 20 Jul 2005 14:32:09 -0000 1.1 --- NoGCTraceLocal.java 19 Jun 2006 06:08:16 -0000 1.2 *************** *** 18,22 **** * $Id$ * ! * @author <a href="http://cs.anu.edu.au/~Steve.Blackburn">Steve Blackburn</a> * @author Daniel Frampton * @author Robin Garner --- 18,22 ---- * $Id$ * ! * @author Steve Blackburn * @author Daniel Frampton * @author Robin Garner Index: NoGC.java =================================================================== RCS file: /cvsroot/jikesrvm/MMTk/src/org/mmtk/plan/nogc/NoGC.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** NoGC.java 20 Jul 2005 14:32:09 -0000 1.1 --- NoGC.java 19 Jun 2006 06:08:16 -0000 1.2 *************** *** 20,24 **** * $Id$ * ! * @author <a href="http://cs.anu.edu.au/~Steve.Blackburn">Steve Blackburn</a> * @author Daniel Frampton * @author Robin Garner --- 20,24 ---- * $Id$ * ! * @author Steve Blackburn * @author Daniel Frampton * @author Robin Garner --- NEW FILE: NoGCCollector.java --- /* * (C) Copyright Department of Computer Science, * Australian National University. 2005 */ package org.mmtk.plan.nogc; import org.mmtk.plan.*; import org.mmtk.vm.ActivePlan; import org.mmtk.vm.Assert; import org.vmmagic.pragma.*; /** * This class implements <i>per-collector thread</i> behavior and state * for the <i>NoGC</i> plan, which simply allocates (without ever collecting * until the available space is exhausted.<p> * * Specifically, this class <i>would</i> define <i>NoGC</i> collection time semantics, * however, since this plan never collects, this class consists only of stubs which * may be useful as a template for implementing a basic collector. * * @see NoGC * @see NoGCMutator * @see StopTheWorldCollector * @see CollectorContext * @see SimplePhase#delegatePhase * * $Id: NoGCCollector.java,v 1.1 2006/06/19 06:08:16 steveb-oss Exp $ * * @author Steve Blackburn * @author Daniel Frampton * @author Robin Garner * @version $Revision: 1.1 $ * @date $Date: 2006/06/19 06:08:16 $ */ public class NoGCCollector extends CollectorContext implements Uninterruptible { /************************************************************************ * Instance fields */ private final NoGCTraceLocal trace; /************************************************************************ * Initialization */ /** * Constructor. One instance is created per physical processor. */ public NoGCCollector() { trace = new NoGCTraceLocal(global().trace); } /**************************************************************************** * * Collection */ /** * Perform a garbage collection */ public final void collect() { Assert.fail("GC Triggered in NoGC Plan. Is -X:gc:ignoreSystemGC=true ?"); } /** * Perform a per-collector collection phase. * * @param phaseId The collection phase to perform * @param participating Is this thread participating in collection * (as opposed to blocked in a JNI call) * @param primary perform any single-threaded local activities. */ public final void collectionPhase(int phaseId, boolean participating, boolean primary) { Assert.fail("GC Triggered in NoGC Plan."); /* if (phaseId == NoGC.PREPARE) { } if (phaseId == NoGC.BEGIN_CLOSURE) { trace.startTrace(); return; } if (phaseId == NoGC.COMPLETE_CLOSURE) { trace.completeTrace(); return; } if (phaseId == NoGC.RELEASE) { } super.collectionPhase(phaseId, participating, primary); */ } /**************************************************************************** * * Miscellaneous */ /** @return The active global plan as a <code>NoGC</code> instance. */ private static final NoGC global() throws InlinePragma { return (NoGC)ActivePlan.global(); } /** @return The current trace instance. */ public final TraceLocal getCurrentTrace() { return trace; } } --- NoGCLocal.java DELETED --- Index: NoGCConstraints.java =================================================================== RCS file: /cvsroot/jikesrvm/MMTk/src/org/mmtk/plan/nogc/NoGCConstraints.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** NoGCConstraints.java 20 Jul 2005 14:32:09 -0000 1.1 --- NoGCConstraints.java 19 Jun 2006 06:08:16 -0000 1.2 *************** *** 17,21 **** * $Id$ * ! * @author <a href="http://cs.anu.edu.au/~Steve.Blackburn">Steve Blackburn</a> * @author Daniel Frampton * @author Robin Garner --- 17,21 ---- * $Id$ * ! * @author Steve Blackburn * @author Daniel Frampton * @author Robin Garner |