use of com.ibm.j9ddr.vm29.pointer.generated.MM_LockingFreeHeapRegionListPointer in project openj9 by eclipse.
the class DumpSegregatedStatsCommand method getTotalRegions.
/**
* Based off of MM_HeapRegionQueue::getTotalRegions. Returns the number of regions.
* This function will calculate the number of regions differently according to the type of
* the actual subclass.
* @throws CorruptDataException
*/
public long getTotalRegions(MM_HeapRegionListPointer heapRegionList) throws CorruptDataException {
long count = 0;
StructurePointer heapRegionQueue = heapRegionList.getAsRuntimeType();
if (heapRegionQueue instanceof MM_LockingHeapRegionQueuePointer) {
MM_LockingHeapRegionQueuePointer lockingHeapRegionQueue = (MM_LockingHeapRegionQueuePointer) heapRegionQueue;
if (lockingHeapRegionQueue._singleRegionsOnly()) {
count = lockingHeapRegionQueue._length().longValue();
} else {
MM_HeapRegionDescriptorSegregatedPointer heapRegionDescriptorSegregated = lockingHeapRegionQueue._head();
while (heapRegionDescriptorSegregated.notNull()) {
count += heapRegionDescriptorSegregated._regionsInSpan().longValue();
heapRegionDescriptorSegregated = heapRegionDescriptorSegregated._next();
}
}
} else if (heapRegionQueue instanceof MM_LockingFreeHeapRegionListPointer) {
MM_LockingFreeHeapRegionListPointer lockingFreeHeapRegionQueue = (MM_LockingFreeHeapRegionListPointer) heapRegionQueue;
MM_HeapRegionDescriptorSegregatedPointer heapRegionDescriptorSegregated = lockingFreeHeapRegionQueue._head();
while (heapRegionDescriptorSegregated.notNull()) {
count += heapRegionDescriptorSegregated._regionsInSpan().longValue();
heapRegionDescriptorSegregated = heapRegionDescriptorSegregated._next();
}
} else {
throw new CorruptDataException("Bad HeapRegionList type");
}
return count;
}
use of com.ibm.j9ddr.vm29.pointer.generated.MM_LockingFreeHeapRegionListPointer in project openj9 by eclipse.
the class DumpSegregatedStatsCommand method getFreeCellCount.
/**
* Count the number of free cells in the entire MM_HeapRegionList
* @throws CorruptDataException
*/
public long getFreeCellCount(MM_HeapRegionListPointer heapRegionList) throws CorruptDataException {
StructurePointer heapRegionQueue = heapRegionList.getAsRuntimeType();
long freeCellCount = 0;
if (heapRegionQueue instanceof MM_LockingHeapRegionQueuePointer) {
MM_LockingHeapRegionQueuePointer lockingHeapRegionQueue = (MM_LockingHeapRegionQueuePointer) heapRegionQueue;
MM_HeapRegionDescriptorSegregatedPointer heapRegionDescriptorSegregated = lockingHeapRegionQueue._head();
while (heapRegionDescriptorSegregated.notNull()) {
freeCellCount += getFreeCellCount(heapRegionDescriptorSegregated);
heapRegionDescriptorSegregated = heapRegionDescriptorSegregated._next();
}
} else if (heapRegionQueue instanceof MM_LockingFreeHeapRegionListPointer) {
MM_LockingFreeHeapRegionListPointer lockingFreeHeapRegionQueue = (MM_LockingFreeHeapRegionListPointer) heapRegionQueue;
MM_HeapRegionDescriptorSegregatedPointer heapRegionDescriptorSegregated = lockingFreeHeapRegionQueue._head();
while (heapRegionDescriptorSegregated.notNull()) {
freeCellCount += getFreeCellCount(heapRegionDescriptorSegregated);
heapRegionDescriptorSegregated = heapRegionDescriptorSegregated._next();
}
} else {
throw new CorruptDataException("Bad HeapRegionList type");
}
return freeCellCount;
}
Aggregations