| /* |
| * 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.plan.TransitiveClosure; |
| import org.mmtk.utility.heap.FreeListPageResource; |
| import org.mmtk.utility.heap.VMRequest; |
| import org.mmtk.utility.Constants; |
| |
| import org.mmtk.vm.VM; |
| |
| import org.vmmagic.pragma.*; |
| import org.vmmagic.unboxed.*; |
| |
| /** |
| * Each instance of this class corresponds to one raw page space. |
| * |
| * This class provides access to raw memory for managing internal meta |
| * data. |
| */ |
| @Uninterruptible public final class RawPageSpace extends Space |
| implements Constants { |
| |
| /** |
| * The caller specifies the region of virtual memory to be used for |
| * this space. If this region conflicts with an existing space, |
| * then the constructor will fail. |
| * |
| * @param name The name of this space (used when printing error messages etc) |
| * @param pageBudget The number of pages this space may consume |
| * before consulting the plan |
| * @param vmRequest An object describing the virtual memory requested. |
| */ |
| public RawPageSpace(String name, int pageBudget, VMRequest vmRequest) { |
| super(name, false, false, vmRequest); |
| if (vmRequest.isDiscontiguous()) { |
| pr = new FreeListPageResource(pageBudget, this, 0); |
| } else { |
| pr = new FreeListPageResource(pageBudget, this, start, extent); |
| } |
| } |
| |
| public void prepare() { } |
| public void release() { } |
| |
| /** |
| * Release a group of pages that were allocated together. |
| * |
| * @param first The first page in the group of pages that were |
| * allocated together. |
| */ |
| @Inline |
| public void release(Address first) { |
| ((FreeListPageResource) pr).releasePages(first); |
| } |
| |
| /** |
| * Trace an object. |
| * |
| * This makes no sense for a raw page space and should never be |
| * called. |
| * |
| * @param object The object to be traced. |
| * @return <code>zero</code>: calling this is an error. |
| */ |
| @Inline |
| public ObjectReference traceObject(TransitiveClosure trace, ObjectReference object) { |
| if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); |
| return ObjectReference.nullReference(); |
| } |
| |
| public boolean isLive(ObjectReference object) { |
| return true; |
| } |
| } |