public class StatementMetricArray extends Object
Changes to StatementMetric instances must be done in a read-lock:
getRwLock.readLock.lock() metric = getAddMetric(index) metric.accountFor(cpu, wall, etc) getRwLock.readLock.unlock()
All other changes are done under write lock for this class.
This is a collection backed by an array that grows by 50% each time expanded, maintains a free/busy list of statement names, maintains an element number of last used element.
The flush operaton copies the complete array, thereby keeping array size. Statement names are only removed on the next flush.
Constructor and Description |
---|
StatementMetricArray(String engineURI,
String name,
int initialSize,
boolean isReportInactive)
Ctor.
|
Modifier and Type | Method and Description |
---|---|
int |
addStatementGetIndex(String statementName)
Adds a statement and returns the index added at.
|
StatementMetric[] |
flushMetrics()
Flushes the existing metrics via array copy and swap.
|
StatementMetric |
getAddMetric(int index)
Returns an existing or creates a new statement metric for the index.
|
ManagedReadWriteLock |
getRwLock()
Returns the read-write lock, for read-lock when modifications are made.
|
void |
removeStatement(String statementName)
Remove a statement.
|
int |
sizeLastElement()
Returns maximum collection size (last used element), which may not truely reflect the number
of actual statements held as some slots may empty up when statements are removed.
|
public void removeStatement(String statementName)
Next flush actually frees the slot that this statement occupied.
statementName
- to removepublic int addStatementGetIndex(String statementName)
May reuse an empty slot, grow the underlying array, or append to the end.
statementName
- to addpublic StatementMetric[] flushMetrics()
May report all statements (empty and non-empty slots) and thereby null values.
Returns null to indicate no reports to do.
public ManagedReadWriteLock getRwLock()
public StatementMetric getAddMetric(int index)
index
- of statementpublic int sizeLastElement()