|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.mmtk.utility.deque.Deque org.mmtk.utility.deque.LocalSSB org.mmtk.utility.deque.LocalQueue
class LocalQueue
This class implements a local (unsynchronized) queue. A queue is strictly FIFO.
Each instance stores word-sized values into a local buffer. When
the buffer is full, or if the flushLocal()
method is
called, the buffer enqueued at the tail of a
SharedDeque
.
The implementation is intended to be as efficient as possible, in
time and space, and is the basis for the TraceBuffer
used by
heap trace generation. Each instance adds a single field to those inherited
from the SSB: a bump pointer.
Preconditions: Buffers are always aligned on buffer-size address
boundaries.
Invariants: Buffers are filled such that tuples (of the specified arity) are packed to the low end of the buffer. Thus buffer underflows will always arise when then cursor is buffer-size aligned.
Field Summary | |
---|---|
protected Address |
head
the start of the buffer |
Fields inherited from class org.mmtk.utility.deque.LocalSSB |
---|
queue, tail, tailBufferEnd |
Fields inherited from class org.mmtk.utility.deque.Deque |
---|
BUFFER_MASK, BUFFER_SIZE, HEAD_INITIAL_VALUE, LOG_PAGES_PER_BUFFER, META_DATA_SIZE, NEXT_FIELD_OFFSET, PAGES_PER_BUFFER, TAIL_INITIAL_VALUE, USABLE_BUFFER_BYTES |
Constructor Summary | |
---|---|
LocalQueue(SharedDeque queue)
Constructor |
Method Summary | |
---|---|
protected boolean |
checkDequeue(int arity)
Check whether there are values in the buffer for a pending dequeue. |
private boolean |
dequeueUnderflow(int arity)
There are not sufficient entries in the head buffer for a pending dequeue. |
protected boolean |
headStarved(int arity)
The head is empty (or null), and the shared queue has no buffers available. |
void |
resetLocal()
Reset the local buffer (throwing away any local entries). |
protected Address |
uncheckedDequeue()
Dequeue a value from the buffer. |
Methods inherited from class org.mmtk.utility.deque.LocalSSB |
---|
bufferSentinel, checkTailInsert, flushLocal, isFlushed, normalizeTail, reset, uncheckedTailInsert |
Methods inherited from class org.mmtk.utility.deque.Deque |
---|
bufferEnd, bufferFirst, bufferLast, bufferLast, bufferLastOffset, bufferOffset, bufferStart |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected Address head
Constructor Detail |
---|
LocalQueue(SharedDeque queue)
queue
- The shared queue to which this local ssb will append
its buffers (when full or flushed).Method Detail |
---|
public void resetLocal()
LocalSSB
resetLocal
in class LocalSSB
protected final boolean checkDequeue(int arity)
arity
- The arity of the values stored in this queue: the
buffer must contain enough space for this many words.protected final Address uncheckedDequeue()
checkDequeue()
to ensure the
buffer has and entry to be removed.
protected final boolean headStarved(int arity)
arity
- The arity of this buffer
private boolean dequeueUnderflow(int arity)
arity
- The arity of this buffer (used for sanity test only).
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |