org.mmtk.plan.immix
Class Immix
java.lang.Object
org.mmtk.plan.Plan
org.mmtk.plan.Simple
org.mmtk.plan.StopTheWorld
org.mmtk.plan.immix.Immix
- All Implemented Interfaces:
- Constants
- Direct Known Subclasses:
- StickyImmix
public class Immix
- extends StopTheWorld
This class implements the global state of an immix collector.
See the PLDI'08 paper by Blackburn and McKinley for a description
of the algorithm: http://doi.acm.org/10.1145/1375581.1375586
All plans make a clear distinction between global and
thread-local activities, and divides global and local state
into separate class hierarchies. Global activities must be
synchronized, whereas no synchronization is required for
thread-local activities. There is a single instance of Plan (or the
appropriate sub-class), and a 1:1 mapping of PlanLocal to "kernel
threads" (aka CPUs or in Jikes RVM, Processors). Thus instance
methods of PlanLocal allow fast, unsychronized access to functions such as
allocation and collection.
The global instance defines and manages static resources
(such as memory and virtual memory resources). This mapping of threads to
instances is crucial to understanding the correctness and
performance properties of MMTk plans.
| Fields inherited from class org.mmtk.plan.Simple |
CLOSURE, collection, collectionAttempt, COMPLETE, completeClosurePhase, FINALIZABLE, finishPhase, FORWARD, FORWARD_FINALIZABLE, FORWARD_REFS, forwardPhase, INITIATE, initPhase, PHANTOM_REFS, POST_SANITY_PLACEHOLDER, PRE_SANITY_PLACEHOLDER, PRECOPY, PREPARE, PREPARE_STACKS, prepareStacks, refTypeClosurePhase, RELEASE, rootClosurePhase, ROOTS, SANITY_BUILD_TABLE, SANITY_CHECK_TABLE, SANITY_COPY_ROOTS, SANITY_PREPARE, SANITY_RELEASE, SANITY_ROOTS, SANITY_SET_POSTGC, SANITY_SET_PREGC, sanityBuildPhase, sanityCheckPhase, SET_COLLECTION_KIND, SOFT_REFS, STACK_ROOTS, WEAK_REFS, WEAK_TRACK_REFS |
| Fields inherited from class org.mmtk.plan.Plan |
ALLOC_CODE, ALLOC_COLD_CODE, ALLOC_DEFAULT, ALLOC_GCSPY, ALLOC_HOT_CODE, ALLOC_IMMORTAL, ALLOC_IMMORTAL_STACK, ALLOC_LARGE_CODE, ALLOC_LOS, ALLOC_NON_MOVING, ALLOC_NON_REFERENCE, ALLOC_PRIMITIVE_LOS, ALLOC_STACK, allocationSiteCount, ALLOCATORS, awaitingAsyncCollection, collectionTrigger, DEFAULT_MAX_NURSERY, DEFAULT_MIN_NURSERY, DEFAULT_POLL_FREQUENCY, DEFAULT_SITE, emergencyCollection, GATHER_WRITE_BARRIER_STATS, GC_PREPARE, GC_PROPER, HEAP_FULL_MINIMUM, HEAP_FULL_PERCENTAGE, IMMORTAL, immortalSpace, insideHarness, LARGE_CODE, largeCodeSpace, LOG_SET_MASK, LOS, LOS_SIZE_THRESHOLD, loSpace, MAX_COLLECTION_ATTEMPTS, META, META_DATA_POLL_FREQUENCY, metaDataSpace, NEEDS_LOG_BIT_IN_HEADER, NON_MOVING, NON_PARTICIPANT, nonMovingSpace, NOT_IN_GC, PLOS_FRAC, requiredAtStart, REQUIRES_LOS, SANITY, sanityChecker, sanitySpace, SCAN_BOOT_IMAGE, SMALL_CODE, smallCodeSpace, stacksPrepared, timeCap, totalPerfCnt, totalTime, UNLOGGED_BIT, USE_CODE_SPACE, VM_SPACE, vmSpace |
| Fields inherited from interface org.mmtk.utility.Constants |
AALOAD_READ_BARRIER, AASTORE_WRITE_BARRIER, ALIGNMENT_VALUE, BITS_IN_ADDRESS, BITS_IN_BYTE, BITS_IN_INT, BITS_IN_PAGE, BITS_IN_SHORT, BITS_IN_WORD, BYTES_IN_ADDRESS, BYTES_IN_BYTE, BYTES_IN_INT, BYTES_IN_KBYTE, BYTES_IN_MBYTE, BYTES_IN_PAGE, BYTES_IN_SHORT, BYTES_IN_WORD, CARD_MASK, CARD_META_PAGES_PER_REGION, GETFIELD_READ_BARRIER, GETSTATIC_READ_BARRIER, LOG_BITS_IN_ADDRESS, LOG_BITS_IN_BYTE, LOG_BITS_IN_INT, LOG_BITS_IN_PAGE, LOG_BITS_IN_SHORT, LOG_BITS_IN_WORD, LOG_BYTES_IN_ADDRESS, LOG_BYTES_IN_ADDRESS_SPACE, LOG_BYTES_IN_BYTE, LOG_BYTES_IN_INT, LOG_BYTES_IN_KBYTE, LOG_BYTES_IN_MBYTE, LOG_BYTES_IN_PAGE, LOG_BYTES_IN_SHORT, LOG_BYTES_IN_WORD, LOG_CARD_BYTES, LOG_CARD_GRAIN, LOG_CARD_META_BYTES, LOG_CARD_META_PAGES, LOG_CARD_META_SIZE, LOG_CARD_UNITS, LOG_MIN_ALIGNMENT, MAX_ALIGNMENT, MAX_BYTES_PADDING, MAX_INT, MIN_ALIGNMENT, MIN_INT, PUTFIELD_WRITE_BARRIER, PUTSTATIC_WRITE_BARRIER, SUPPORT_CARD_SCANNING |
|
Constructor Summary |
Immix()
Constructor. |
| Methods inherited from class org.mmtk.plan.Plan |
availableMemory, boot, bootTimeWriteBarrier, checkForAsyncCollection, collectionComplete, collectionRequired, concurrentCollectionRequired, forceFullHeapCollection, freeMemory, fullyBooted, gcInProgress, gcInProgressProper, getAllocationSite, getCollectionReserve, getHeapFullThreshold, getMetaDataPagesUsed, getPagesAvail, getPagesReserved, getSpaceFromAllocatorAnyLocal, getSpaceNameFromAllocatorAnyLocal, getSpecializedScanClass, getTimeCap, getTotalPages, harnessBegin, harnessEnd, insertPhaseAfter, isCollectionTriggered, isCurrentGCNursery, isEmergencyCollection, isInitialized, lastCollectionFailed, lastCollectionFullHeap, loadObjectReference, logRequired, markAsLogged, markAsUnlogged, notifyExit, poll, printDetailedTiming, printPostStats, printPreStats, printUsedPages, reservedMemory, sanityExpectedRC, sanityLinearScan, setAwaitingAsyncCollection, setBootTimeGCBits, setCollectionTrigger, setCollectionTriggered, setGCStatus, stacksPrepared, startGCspyServer, storeObjectReference, stressTestGCRequired, totalMemory, usedMemory |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
immixSpace
public static final ImmixSpace immixSpace
- Class variables
IMMIX
public static final int IMMIX
SCAN_IMMIX
public static final int SCAN_IMMIX
- See Also:
- Constant Field Values
SCAN_DEFRAG
public static final int SCAN_DEFRAG
- See Also:
- Constant Field Values
immixTrace
public final Trace immixTrace
- Instance variables
Immix
public Immix()
- Constructor.
collectionPhase
public void collectionPhase(short phaseId)
- Perform a (global) collection phase.
- Overrides:
collectionPhase in class Simple
- Parameters:
phaseId - Collection phase to execute.
getPagesUsed
public int getPagesUsed()
- Return the number of pages reserved for use given the pending
allocation. The superclass accounts for its spaces, we just
augment this with the mark-sweep space's contribution.
- Overrides:
getPagesUsed in class Plan
- Returns:
- The number of pages reserved given the pending
allocation, excluding space reserved for copying.
getPagesRequired
public int getPagesRequired()
- Calculate the number of pages a collection is required to free to satisfy
outstanding allocation requests.
- Overrides:
getPagesRequired in class Plan
- Returns:
- the number of pages a collection is required to free to satisfy
outstanding allocation requests.
willNeverMove
public boolean willNeverMove(ObjectReference object)
- Description copied from class:
Plan
- Can this object ever move. Used by the VM to make decisions about
whether it needs to copy IO buffers etc.
- Overrides:
willNeverMove in class Plan
- Parameters:
object - Object in question
- Returns:
- True if the object will never move
- See Also:
Plan.willNeverMove(org.vmmagic.unboxed.ObjectReference)
registerSpecializedMethods
protected void registerSpecializedMethods()
- Register specialized methods.
- Overrides:
registerSpecializedMethods in class Plan