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.LargeObjectAllocator;
016 import org.mmtk.utility.gcspy.drivers.TreadmillDriver;
017 import org.mmtk.utility.Constants;
018
019 import org.vmmagic.pragma.*;
020
021 /**
022 * Each instance of this class is intended to provide fast,
023 * unsynchronized access to a treadmill. Therefore instances must not
024 * be shared across truly concurrent threads (CPUs). Rather, one or
025 * more instances of this class should be bound to each CPU. The
026 * shared VMResource used by each instance is the point of global
027 * synchronization, and synchronization only occurs at the granularity
028 * of acquiring (and releasing) chunks of memory from the VMResource.<p>
029 *
030 * If there are C CPUs and T TreadmillSpaces, there must be C X T
031 * instances of this class, one for each CPU, TreadmillSpace pair.
032 */
033 @Uninterruptible
034 public final class LargeObjectLocal extends LargeObjectAllocator implements Constants {
035
036 /****************************************************************************
037 *
038 * Class variables
039 */
040
041 /****************************************************************************
042 *
043 * Instance variables
044 */
045
046 /****************************************************************************
047 *
048 * Initialization
049 */
050
051 /**
052 * Constructor
053 *
054 * @param space The treadmill space to which this thread instance is
055 * bound.
056 */
057 public LargeObjectLocal(BaseLargeObjectSpace space) {
058 super(space);
059 }
060
061 /****************************************************************************
062 *
063 * Allocation
064 */
065
066 /****************************************************************************
067 *
068 * Collection
069 */
070
071 /**
072 * Prepare for a collection. Clear the treadmill to-space head and
073 * prepare the collector. If paranoid, perform a sanity check.
074 */
075 public void prepare(boolean fullHeap) {
076 }
077
078 /**
079 * Finish up after a collection.
080 */
081 public void release(boolean fullHeap) {
082 }
083
084 /****************************************************************************
085 *
086 * Miscellaneous size-related methods
087 */
088
089 /**
090 * Gather data for GCSpy from the nursery
091 * @param event the gc event
092 * @param losDriver the GCSpy space driver
093 */
094 public void gcspyGatherData(int event, TreadmillDriver losDriver) {
095 // TODO: assumes single threaded
096 // TODO: assumes non-explit LOS
097 ((LargeObjectSpace)space).getTreadmill().gcspyGatherData(event, losDriver);
098 }
099
100 /**
101 * Gather data for GCSpy for an older space
102 * @param event the gc event
103 * @param losDriver the GCSpy space driver
104 * @param tospace gather from tospace?
105 */
106 public void gcspyGatherData(int event, TreadmillDriver losDriver, boolean tospace) {
107 // TODO: assumes single threaded
108 ((LargeObjectSpace)space).getTreadmill().gcspyGatherData(event, losDriver, tospace);
109 }
110 }