org.jikesrvm.scheduler
Class TimerThread

java.lang.Object
  extended by org.mmtk.plan.MutatorContext
      extended by org.mmtk.plan.SimpleMutator
          extended by org.mmtk.plan.StopTheWorldMutator
              extended by org.mmtk.plan.generational.GenMutator
                  extended by org.mmtk.plan.generational.immix.GenImmixMutator
                      extended by org.jikesrvm.mm.mminterface.Selected.Mutator
                          extended by org.jikesrvm.mm.mminterface.ThreadContext
                              extended by org.jikesrvm.scheduler.RVMThread
                                  extended by org.jikesrvm.scheduler.TimerThread
All Implemented Interfaces:
Constants

public class TimerThread
extends RVMThread

The timer thread. Although we are using purely native threading, threads need to occasionally be poked for the purposes of sampling and OSR.

It should be noted that the implementation of this class prioritizes unobtrusiveness and lock-freedom over precision. For example, on any given timer release some threads may be missed or poked more than once, with the understanding that if they are missed on one release then they will (with high probability) not be missed on a future release.

It may be that to make the system scale, more than one timer thread will be needed. But for now, this should suffice.


Nested Class Summary
 
Nested classes/interfaces inherited from class org.jikesrvm.scheduler.RVMThread
RVMThread.AllButGCHardHandshakeVisitor, RVMThread.BlockAdapter, RVMThread.GCBlockAdapter, RVMThread.HandshakeBlockAdapter, RVMThread.HardHandshakeVisitor, RVMThread.SoftHandshakeVisitor, RVMThread.SuspendBlockAdapter, RVMThread.Waiting
 
Field Summary
private static int verbose
           
 
Fields inherited from class org.jikesrvm.scheduler.RVMThread
acctLock, activeMutatorContext, allButGC, ALWAYS_LOCK_ON_STATE_TRANSITION, arrayIndexTrapParam, asyncDebugRequestedForThisThread, asyncThrowable, atYieldpoint, awaitingSpinLock, BACKEDGE, barriersEntered, barriersExited, blockAdapters, BLOCKED_IN_JNI, BLOCKED_IN_NATIVE, bootThread, bridgeInstructions, cachedFreeLock, codePatchSyncRequested, contenderLink, contextRegisters, contextRegistersSave, countdownCBSCall, countdownCBSMethod, daemon, debugLock, debugRequested, debugThreads, doProfileReport, dumpLock, dumpStackOnBlock, EPILOGUE, execStatusTransitionHistogram, exitInProgress, feedlet, firstCBSCallSample, firstCBSMethodSample, flushRequested, fooFPOffset, framePointer, gcBlockAdapter, handshakeBlockAdapter, handshakeLock, handshakeThreads, hasInterrupt, hiddenSignatureId, IN_JAVA, IN_JAVA_TO_BLOCK, IN_JNI, IN_NATIVE, inDumpStack, isBlockedForGC, isBlockedForHandshake, isBlocking, isJoinable, isSuspended, isWaitingForOsr, jniEnv, LAST_EXEC_STATUS, lockingId, LOG_MAX_THREADS, MAX_THREADS, NATIVE_EPILOGUE, NATIVE_PROLOGUE, NEW, next, nextSlot, notifyAllOperations, notifyOperations, numCBSCallSamples, numCBSMethodSamples, numProcessors, numThreads, onStackReplacementEvent, osr_done, OSROPT, PRIMORDIAL_THREAD_INDEX, PROLOGUE, pthread_id, queuedOn, requesting_osr, shouldBlockForGC, shouldBlockForHandshake, shouldSuspend, shouldSuspendToken, sloppyExecStatusHistogram, softHandshakeDataLock, softHandshakeLeft, softHandshakeRequested, stackLimit, statusAtSTWHistogram, suspendBlockAdapter, systemThread, takeYieldpoint, TERMINATED, thread_cbs_counter, threadBySlot, threadingInitialized, threads, threadSlot, timedWaitOperations, timerTicks, timeSliceExpired, totalResumeTime, totalSuspendTime, trace, traceAboutToTerminate, traceAcct, traceBind, traceBlock, traceDetails, traceReallyBlock, tsFPOffset, waitCount, waiting, waitObject, waitOperations, yieldForCBSCall, yieldForCBSMethod, yieldpointRequestPending, yieldToOSRRequested
 
Fields inherited from class org.jikesrvm.mm.mminterface.ThreadContext
collectorContext
 
Fields inherited from class org.mmtk.plan.generational.GenMutator
arrayRemset, nursery, remset
 
Fields inherited from class org.mmtk.plan.MutatorContext
immortal, lgcode, log, los, nonmove, smcode
 
Fields inherited from interface org.mmtk.utility.Constants
ALIGNMENT_VALUE, ARRAY_ELEMENT, BITS_IN_ADDRESS, BITS_IN_BYTE, BITS_IN_CHAR, BITS_IN_INT, BITS_IN_PAGE, BITS_IN_SHORT, BITS_IN_WORD, BYTES_IN_ADDRESS, BYTES_IN_BYTE, BYTES_IN_CHAR, 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, INSTANCE_FIELD, LOG_BITS_IN_ADDRESS, LOG_BITS_IN_BYTE, LOG_BITS_IN_CHAR, 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_CHAR, 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, SUPPORT_CARD_SCANNING
 
Constructor Summary
TimerThread()
           
 
Method Summary
 boolean ignoreHandshakesAndGC()
          Should this thread run concurrently with STW GC and ignore handshakes?
private static void printExceptionAndDie(Throwable e)
           
 void run()
          Method to be executed when this thread starts running.
 
Methods inherited from class org.jikesrvm.scheduler.RVMThread
acknowledgeBlockRequests, assertAcceptableStates, assertAcceptableStates, assertUnacceptableStates, assertUnacceptableStates, assignThreadSlot, asyncBlock, attemptLeaveNativeNoBlock, beginPairHandshake, beginPairWith, beginPairWithCurrent, bind, bindIfRequested, block, block, blockedFor, boot, checkBlock, checkDebugRequest, clearDisallowAllocationsByThisThread, clearEmergencyAllocation, clearInterrupted, clearOutOfMemoryError, clearPhysicalAllocationFailed, communicationLock, communicationLockForSlot, countStackFrames, disableYieldpoints, dump, dump, dump, dump, dump1DHisto, dumpAcct, dumpAll, dumpStack, dumpStack, dumpStack, dumpStackAndDie, dumpStats, dumpVirtualMachine, dumpWithPadding, emergencyAllocation, enableYieldpoints, endPairHandshake, endPairWith, endPairWithCurrent, enterJNIBlockedFromCallIntoNative, enterJNIBlockedFromJNIFunctionCall, enterJNIFromCallIntoNative, enterJNIFromJNIFunctionCall, enterNative, extDump, failIfYieldpointsDisabled, finishThreadTermination, fixupMovedStack, gcEnabled, getCollectionAttempt, getContextRegisters, getCurrentFeedlet, getCurrentThread, getCurrentThreadSlot, getDisableGCDepth, getDisallowAllocationsByThisThread, getExceptionRegisters, getExecStatus, getIsAboutToTerminate, getJavaLangThread, getJNIEnv, getLockingId, getName, getOutOfMemoryError, getPriority, getStack, getStackLength, getState, getThreadForStackTrace, getThreadSlot, handleHandshakeRequest, handleUncaughtException, hardHandshakeResume, hardHandshakeResume, hardHandshakeSuspend, hardHandshakeSuspend, hasNativeStackFrame, holdsLock, init, initializeJNIEnv, interrupt, isAlive, isBlocked, isBootThread, isDaemonThread, isGCThread, isInJava, isInterrupted, isSystemThread, join, leaveJNIBlockedFromCallIntoNative, leaveJNIBlockedFromJNIFunctionCall, leaveJNIFromCallIntoNative, leaveJNIFromJNIFunctionCall, leaveNative, makeDaemon, monitor, monitorForSlot, notify, notifyAll, notRunning, observeExecStatus, observeExecStatusAtSTW, observeStateTransition, park, physicalAllocationFailed, processAboutToTerminate, raiseIllegalMonitorStateException, releaseThreadSlot, reportCollectionAttempt, reportThreadTransitionCounts, resetCollectionAttempts, resizeCurrentStack, resume, safeAsyncBlock, safeBlock, safeToForceGCs, saveThreadState, setDisableGCDepth, setDisallowAllocationsByThisThread, setEmergencyAllocation, setName, setOutOfMemoryError, setPhysicalAllocationFailed, setPriority, setupBootJavaThread, setupBootThread, shouldBeSampled, sleep, sleep, snapshotHandshakeThreads, softHandshake, softRendezvous, softRendezvousCheckAndClear, softRendezvousCommit, start, stop, suspend, terminate, timerTick, toString, trace, trace, trace, traceback, traceback, tracebackWithoutLock, traceHex, transitionHistogramIndex, unblock, unpark, wait, wait, waitAbsoluteNanos, waitImpl, worldStopped, yield, yieldpoint, yieldpointFromBackedge, yieldpointFromEpilogue, yieldpointFromPrologue, yieldpointsEnabled
 
Methods inherited from class org.jikesrvm.mm.mminterface.Selected.Mutator
get, getThread
 
Methods inherited from class org.mmtk.plan.generational.immix.GenImmixMutator
alloc, collectionPhase, getAllocatorFromSpace, postAlloc
 
Methods inherited from class org.mmtk.plan.generational.GenMutator
assertRemsetsFlushed, flushRememberedSets, objectReferenceBulkCopy, objectReferenceNonHeapWrite, objectReferenceTryCompareAndSwap, objectReferenceWrite
 
Methods inherited from class org.mmtk.plan.MutatorContext
addressBulkCopy, addressRead, addressTryCompareAndSwap, addressWrite, booleanBulkCopy, booleanRead, booleanWrite, byteBulkCopy, byteRead, byteWrite, charBulkCopy, charRead, charWrite, checkAllocator, deinitMutator, doubleBulkCopy, doubleRead, doubleWrite, extentBulkCopy, extentRead, extentWrite, floatBulkCopy, floatRead, floatWrite, flush, getId, getLog, initMutator, intBulkCopy, intRead, intTryCompareAndSwap, intWrite, javaLangReferenceReadBarrier, longBulkCopy, longRead, longTryCompareAndSwap, longWrite, objectReferenceNonHeapRead, objectReferenceRead, offsetBulkCopy, offsetRead, offsetWrite, shortBulkCopy, shortRead, shortWrite, wordBulkCopy, wordRead, wordTryCompareAndSwap, wordWrite
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

verbose

private static final int verbose
See Also:
Constant Field Values
Constructor Detail

TimerThread

public TimerThread()
Method Detail

run

public void run()
Description copied from class: RVMThread
Method to be executed when this thread starts running. Calls java.lang.Thread.run but system threads can override directly.

Overrides:
run in class RVMThread

printExceptionAndDie

private static void printExceptionAndDie(Throwable e)

ignoreHandshakesAndGC

public boolean ignoreHandshakesAndGC()
Description copied from class: RVMThread
Should this thread run concurrently with STW GC and ignore handshakes?

Overrides:
ignoreHandshakesAndGC in class RVMThread