/* * 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.policy; import org.mmtk.utility.alloc.BumpPointer; import org.vmmagic.pragma.Uninterruptible; import org.vmmagic.unboxed.Extent; /** * This class implements unsynchronized (local) elements of a * sliding mark-compact collector. Allocation is via the bump pointer * (@see BumpPointer). * * @see BumpPointer * @see MarkCompactSpace */ @Uninterruptible public final class MarkCompactLocal extends BumpPointer { /** * Constructor * * @param space The space to bump point into. */ public MarkCompactLocal(MarkCompactSpace space) { super(space, true); } private MarkCompactSpace mcSpace() { return (MarkCompactSpace)space; } /** * Prepare for collection: update the metadata for the current region, and flush * this bump-pointer's allocations to the global page list. */ public void prepare() { if (!initialRegion.isZero()) { setDataEnd(region,cursor); mcSpace().append(initialRegion); } reset(); } /** * Flush this thread-local component in preparation for the mutator thread * to die. */ public void flush() { prepare(); } /** * Maximum size of a single region. Important for children that implement * load balancing or increments based on region size. * @return the maximum region size */ @Override protected Extent maximumRegionSize() { return Extent.fromIntZeroExtend(4 << LOG_BLOCK_SIZE) ; } }