/* * This file is part of the Jikes RVM project (http://jikesrvm.org). * * This file is licensed to You under the Eclipse Public License (EPL); * You may not use this file except in compliance with the License. You * may obtain a copy of the License at * * http://www.opensource.org/licenses/eclipse-1.0.php * * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. */ package org.mmtk.plan; import org.mmtk.utility.Log; import org.mmtk.vm.VM; import org.vmmagic.pragma.*; /** * This class (and its sub-classes) implement <i>per-collector thread</i> * behavior and state. * * MMTk assumes that the VM instantiates instances of CollectorContext * in thread local storage (TLS) for each thread participating in * collection. Accesses to this state are therefore assumed to be * low-cost during mutator time.<p> * * @see CollectorContext */ @Uninterruptible public abstract class StopTheWorldCollector extends SimpleCollector { /**************************************************************************** * * Collection. */ /** Perform garbage collection */ public void collect() { Phase.beginNewPhaseStack(Phase.scheduleComplex(global().collection)); } /** Perform some concurrent garbage collection */ public final void concurrentCollect() { VM.assertions.fail("concurrentCollect called on StopTheWorld collector"); } /** * Perform some concurrent collection work. * * @param phaseId The unique phase identifier */ public void concurrentCollectionPhase(short phaseId) { VM.assertions.fail("concurrentCollectionPhase triggered on StopTheWorld collector"); } /**************************************************************************** * * Miscellaneous. */ /** @return The active global plan as a <code>StopTheWorld</code> instance. */ @Inline private static StopTheWorld global() { return (StopTheWorld) VM.activePlan.global(); } }