| /* |
| * 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.LargeObjectAllocator; |
| import org.mmtk.utility.gcspy.drivers.TreadmillDriver; |
| import org.mmtk.utility.Constants; |
| |
| import org.vmmagic.pragma.*; |
| |
| /** |
| * Each instance of this class is intended to provide fast, |
| * unsynchronized access to a treadmill. Therefore instances must not |
| * be shared across truely concurrent threads (CPUs). Rather, one or |
| * more instances of this class should be bound to each CPU. The |
| * shared VMResource used by each instance is the point of global |
| * synchronization, and synchronization only occurs at the granularity |
| * of aquiring (and releasing) chunks of memory from the VMResource. |
| * |
| * If there are C CPUs and T TreadmillSpaces, there must be C X T |
| * instances of this class, one for each CPU, TreadmillSpace pair. |
| */ |
| @Uninterruptible |
| public final class LargeObjectLocal extends LargeObjectAllocator implements Constants { |
| |
| /**************************************************************************** |
| * |
| * Class variables |
| */ |
| |
| /**************************************************************************** |
| * |
| * Instance variables |
| */ |
| |
| /**************************************************************************** |
| * |
| * Initialization |
| */ |
| |
| /** |
| * Constructor |
| * |
| * @param space The treadmill space to which this thread instance is |
| * bound. |
| */ |
| public LargeObjectLocal(BaseLargeObjectSpace space) { |
| super(space); |
| } |
| |
| /**************************************************************************** |
| * |
| * Allocation |
| */ |
| |
| /**************************************************************************** |
| * |
| * Collection |
| */ |
| |
| /** |
| * Prepare for a collection. Clear the treadmill to-space head and |
| * prepare the collector. If paranoid, perform a sanity check. |
| */ |
| public void prepare(boolean fullHeap) { |
| } |
| |
| /** |
| * Finish up after a collection. |
| */ |
| public void release(boolean fullHeap) { |
| } |
| |
| /**************************************************************************** |
| * |
| * Miscellaneous size-related methods |
| */ |
| |
| /** |
| * Gather data for GCSpy from the nursery |
| * @param event the gc event |
| * @param losDriver the GCSpy space driver |
| */ |
| public void gcspyGatherData(int event, TreadmillDriver losDriver) { |
| // TODO: assumes single threaded |
| // TODO: assumes non-explit LOS |
| ((LargeObjectSpace)space).getTreadmill().gcspyGatherData(event, losDriver); |
| } |
| |
| /** |
| * Gather data for GCSpy for an older space |
| * @param event the gc event |
| * @param losDriver the GCSpy space driver |
| * @param tospace gather from tospace? |
| */ |
| public void gcspyGatherData(int event, TreadmillDriver losDriver, boolean tospace) { |
| // TODO: assumes single threaded |
| ((LargeObjectSpace)space).getTreadmill().gcspyGatherData(event, losDriver, tospace); |
| } |
| } |