public class StickyImmix extends Immix
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.
| Modifier and Type | Field and Description |
|---|---|
static BooleanCounter |
fullHeap |
private static int |
lastCommittedImmixPages
TODO: this field is unused, somebody with MMTk knowledge needs to look at it
|
(package private) static boolean |
MAJOR_GC_ONLY
If true then we only do full heap GCs---so we're like MarkSweep (+ write barrier)
|
SharedDeque |
modPool
Remset pool
|
(package private) static boolean |
NURSERY_COLLECT_PLOS
If true, then new PLOS objects are collected at each nursery GC
|
static int |
SCAN_NURSERY |
protected static float |
SURVIVAL_ESTIMATE
estimated collection yield
|
collectWholeHeap, IMMIX, immixSpace, immixTrace, lastGCWasDefrag, nextGCWholeHeap, SCAN_DEFRAG, SCAN_IMMIXpostSanityPhase, preSanityPhaseCLOSURE, collection, collectionAttempt, COMPLETE, completeClosurePhase, FINALIZABLE, finishPhase, FORWARD, FORWARD_FINALIZABLE, FORWARD_REFS, forwardPhase, INITIATE, initPhase, PHANTOM_REFS, POST_SANITY_PLACEHOLDER, PRE_SANITY_PLACEHOLDER, 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_REFSALLOC_CODE, ALLOC_COLD_CODE, ALLOC_DEFAULT, ALLOC_GCSPY, ALLOC_HOT_CODE, ALLOC_IMMORTAL, ALLOC_LARGE_CODE, ALLOC_LOS, ALLOC_NON_MOVING, ALLOC_NON_REFERENCE, ALLOC_PRIMITIVE_LOS, ALLOC_STACK, allocationSiteCount, ALLOCATORS, concurrentWorkers, controlCollectorContext, DEFAULT_MAX_NURSERY, DEFAULT_MIN_NURSERY, DEFAULT_SITE, defaultCollectorContext, emergencyCollection, GATHER_WRITE_BARRIER_STATS, GC_PREPARE, GC_PROPER, IMMORTAL, immortalSpace, insideHarness, internalTriggeredCollection, LARGE_CODE, largeCodeSpace, lastInternalTriggeredCollection, LOS, loSpace, MAX_NON_LOS_COPY_BYTES, MAX_NON_LOS_DEFAULT_ALLOC_BYTES, MAX_NON_LOS_NONMOVING_ALLOC_BYTES, META, metaDataSpace, NEEDS_LOG_BIT_IN_HEADER, NON_MOVING, NON_PARTICIPANT, nonMovingSpace, NOT_IN_GC, parallelWorkers, pretenureThreshold, SANITY, sanityChecker, sanitySpace, SCAN_BOOT_IMAGE, SMALL_CODE, smallCodeSpace, stacksPrepared, totalTime, USE_CODE_SPACE, userTriggeredCollection, VM_SPACE, vmSpace| Constructor and Description |
|---|
StickyImmix()
Constructor.
|
| Modifier and Type | Method and Description |
|---|---|
void |
collectionPhase(short phaseId)
Perform a (global) collection phase.
|
boolean |
collectionRequired(boolean spaceFull,
Space space)
This method controls the triggering of a GC.
|
void |
forceFullHeapCollection()
Force the next collection to be full heap.
|
int |
getCollectionReserve()
Return the number of pages reserved for collection.
|
boolean |
isCurrentGCNursery() |
boolean |
isLastGCFull() |
void |
printPreStats()
Print pre-collection statistics.
|
protected void |
registerSpecializedMethods()
Registers specialized methods.
|
protected boolean |
requiresFullHeapCollection()
Determine whether this GC should be a full heap collection.
|
void |
userTriggeredGC()
A user-triggered GC has been initiated.
|
getPagesUsed, lastCollectionWasExhaustive, preCollectorSpawn, willNeverMoveprocessOptionsreplacePhase, replacePlaceholderPhase, switchNurseryZeroingApproachavailableMemory, bootTimeWriteBarrier, concurrentCollectionRequired, determineThreadCount, enableAllocation, enableCollection, freeMemory, fullyBooted, gcInProgress, gcInProgressProper, getAllocationSite, getPagesAvail, getPagesReserved, getSpecializedScanClass, getTotalPages, handleUserCollectionRequest, harnessBegin, harnessEnd, insertPhaseAfter, isEmergencyCollection, isInitialized, isInternalTriggeredCollection, isUserTriggeredCollection, lastCollectionFullHeap, loadObjectReference, logPoll, notifyExit, poll, printDetailedTiming, printPostStats, printUsedPages, reservedMemory, resetCollectionTrigger, sanityExpectedRC, sanityLinearScan, setBuildTimeGCByte, setGCStatus, spawnCollectorThreads, stacksPrepared, startGCspyServer, storeObjectReference, stressTestGCRequired, totalMemory, triggerInternalCollectionRequest, usedMemorystatic final boolean NURSERY_COLLECT_PLOS
static final boolean MAJOR_GC_ONLY
protected static final float SURVIVAL_ESTIMATE
public static int SCAN_NURSERY
private static int lastCommittedImmixPages
public static BooleanCounter fullHeap
public final SharedDeque modPool
public StickyImmix()
public void userTriggeredGC()
public void forceFullHeapCollection()
PlanforceFullHeapCollection in class Planpublic final void collectionPhase(short phaseId)
ImmixcollectionPhase in class ImmixphaseId - The unique id of the phase to perform.public final boolean collectionRequired(boolean spaceFull, Space space)
true to trigger a collection.collectionRequired in class PlanspaceFull - Space request failed, must recover pages within 'space'.space - TODOtrue if a collection is requested by the plan.protected boolean requiresFullHeapCollection()
public int getCollectionReserve()
ImmixgetCollectionReserve in class Immixpublic void printPreStats()
printPreStats in class Planpublic final boolean isCurrentGCNursery()
isCurrentGCNursery in class Planpublic final boolean isLastGCFull()
protected void registerSpecializedMethods()
PlanregisterSpecializedMethods in class Immix