Exemplo n.º 1
0
void
MM_TLHAllocationSupport::objectAllocationNotify(MM_EnvironmentBase *env, void *heapBase, void *heapTop)
{
	MM_GCExtensionsBase *extensions = env->getExtensions();
	MM_CollectorLanguageInterface * cli = extensions->collectorLanguageInterface;
	GC_ObjectHeapIteratorAddressOrderedList objectHeapIterator(extensions, (omrobjectptr_t)heapBase, heapTop, false, false);
	omrobjectptr_t object = NULL;

	while(NULL != (object = objectHeapIterator.nextObject())){
		env->objectAllocationNotify(object);
	}
}
Exemplo n.º 2
0
void
MM_TLHAllocationSupport::updateFrequentObjectsStats(MM_EnvironmentBase *env)
{
	MM_GCExtensionsBase *extensions = env->getExtensions();
	MM_FrequentObjectsStats* frequentObjectsStats = _objectAllocationInterface->getFrequentObjectsStats();

	if(NULL != frequentObjectsStats){
		/* presumably first and current alloc pointer will point to an object */
		GC_ObjectHeapIteratorAddressOrderedList objectHeapIterator(extensions, (omrobjectptr_t) getBase(), (omrobjectptr_t) getAlloc(), false, false);
		omrobjectptr_t object = NULL;
		uintptr_t limit = (((uintptr_t) getAlloc() - (uintptr_t) getBase())*extensions->frequentObjectAllocationSamplingRate)/100 + (uintptr_t) getBase();

		while(NULL != (object = objectHeapIterator.nextObject())){
			if( ((uintptr_t) object) > limit){
				break;
			}
			frequentObjectsStats->update(env, object);
		}
	}
}
Exemplo n.º 3
0
void
MM_SegregatedAllocationInterface::updateFrequentObjectsStats(MM_EnvironmentBase *env, uintptr_t sizeClass)
{
	MM_GCExtensionsBase *extensions = env->getExtensions();
	MM_AllocationContextSegregated *ac = (MM_AllocationContextSegregated *) env->getAllocationContext();
	omrobjectptr_t base = (omrobjectptr_t) _allocationCacheBases[sizeClass];
	omrobjectptr_t top = (omrobjectptr_t) _allocationCache[sizeClass].top;

	if((NULL != _frequentObjectsStats) && (NULL != base) && (NULL != top)){
		uintptr_t cellSize = _sizeClasses->getCellSize(sizeClass);

		GC_ObjectHeapIteratorSegregated objectHeapIterator(extensions, base, top, ac->_smallRegions[sizeClass]->getRegionType(), cellSize, false, false);
		omrobjectptr_t object = NULL;
		uintptr_t limit = (((uintptr_t) top - (uintptr_t) base)*extensions->frequentObjectAllocationSamplingRate)/100 + (uintptr_t) base;

		while(NULL != (object = objectHeapIterator.nextObject())){
			if( ((uintptr_t) object) > limit){
				break;
			}
			_frequentObjectsStats->update(env, object);
		}
	}
}