|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||||
java.lang.Objectorg.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 LocalSSBprotected 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 | ||||||||||