001 /*
002 * This file is part of the Jikes RVM project (http://jikesrvm.org).
003 *
004 * This file is licensed to You under the Eclipse Public License (EPL);
005 * You may not use this file except in compliance with the License. You
006 * may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/eclipse-1.0.php
009 *
010 * See the COPYRIGHT.txt file distributed with this work for information
011 * regarding copyright ownership.
012 */
013 package org.mmtk.policy;
014
015 import org.mmtk.utility.alloc.BumpPointer;
016 import org.vmmagic.pragma.Uninterruptible;
017 import org.vmmagic.unboxed.Extent;
018
019 /**
020 * This class implements unsynchronized (local) elements of a
021 * sliding mark-compact collector. Allocation is via the bump pointer
022 * (@see BumpPointer).
023 *
024 * @see BumpPointer
025 * @see MarkCompactSpace
026 */
027 @Uninterruptible
028 public final class MarkCompactLocal extends BumpPointer {
029
030 /**
031 * Constructor
032 *
033 * @param space The space to bump point into.
034 */
035 public MarkCompactLocal(MarkCompactSpace space) {
036 super(space, true);
037 }
038
039 private MarkCompactSpace mcSpace() {
040 return (MarkCompactSpace)space;
041 }
042
043 /**
044 * Prepare for collection: update the metadata for the current region, and flush
045 * this bump-pointer's allocations to the global page list.
046 */
047 public void prepare() {
048 if (!initialRegion.isZero()) {
049 setDataEnd(region,cursor);
050 mcSpace().append(initialRegion);
051 }
052 reset();
053 }
054
055 /**
056 * Flush this thread-local component in preparation for the mutator thread
057 * to die.
058 */
059 public void flush() {
060 prepare();
061 }
062
063 @Override
064 protected Extent maximumRegionSize() { return Extent.fromIntZeroExtend(4 << LOG_BLOCK_SIZE) ; }
065
066 }