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 */ 013package org.mmtk.policy; 014 015import org.mmtk.utility.alloc.BumpPointer; 016import org.vmmagic.pragma.Uninterruptible; 017import 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 028public 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() { 065 return Extent.fromIntZeroExtend(4 << LOG_BLOCK_SIZE); 066 } 067 068}