本文整理汇总了C++中MM_GCExtensionsBase类的典型用法代码示例。如果您正苦于以下问题:C++ MM_GCExtensionsBase类的具体用法?C++ MM_GCExtensionsBase怎么用?C++ MM_GCExtensionsBase使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了MM_GCExtensionsBase类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: sizeof
/**
* Allocate and initialize the receivers internal structures.
* @return true on success, false on failure.
*/
bool
MM_ParallelSweepChunkArray::initialize(MM_EnvironmentBase* env, bool useVmem)
{
bool result = false;
MM_GCExtensionsBase* extensions = env->getExtensions();
_useVmem = useVmem;
if (extensions->isFvtestForceSweepChunkArrayCommitFailure()) {
Trc_MM_SweepHeapSectioning_parallelSweepChunkArrayCommitFailureForced(env->getLanguageVMThread());
} else {
if (useVmem) {
MM_MemoryManager* memoryManager = extensions->memoryManager;
if (memoryManager->createVirtualMemoryForMetadata(env, &_memoryHandle, extensions->heapAlignment, _size * sizeof(MM_ParallelSweepChunk))) {
void* base = memoryManager->getHeapBase(&_memoryHandle);
result = memoryManager->commitMemory(&_memoryHandle, base, _size * sizeof(MM_ParallelSweepChunk));
if (!result) {
Trc_MM_SweepHeapSectioning_parallelSweepChunkArrayCommitFailed(env->getLanguageVMThread(), base, _size * sizeof(MM_ParallelSweepChunk));
}
_array = (MM_ParallelSweepChunk*)base;
}
} else {
if (0 != _size) {
_array = (MM_ParallelSweepChunk*)env->getForge()->allocate(_size * sizeof(MM_ParallelSweepChunk), MM_AllocationCategory::FIXED, OMR_GET_CALLSITE());
result = (NULL != _array);
} else {
result = true;
}
}
}
return result;
}
示例2:
bool
MM_VerboseBuffer::ensureCapacity(MM_EnvironmentBase *env, uintptr_t spaceNeeded)
{
MM_GCExtensionsBase *extensions = MM_GCExtensionsBase::getExtensions(env->getOmrVM());
bool result = true;
if(freeSpace() < spaceNeeded) {
/* Not enough space in the current buffer - try to alloc a larger one and use that */
char *oldBuffer = _buffer;
uintptr_t currentSize = this->currentSize();
uintptr_t newStringLength = currentSize + spaceNeeded;
uintptr_t newSize = newStringLength + (newStringLength / 2);
char* newBuffer = (char *) extensions->getForge()->allocate(newSize, MM_AllocationCategory::DIAGNOSTIC, OMR_GET_CALLSITE());
if(NULL == newBuffer) {
result = false;
} else {
_buffer = newBuffer;
/* Got a new buffer - initialize it */
_bufferTop = _buffer + newSize;
reset();
/* Copy across the contents of the old buffer */
strcpy(_buffer, oldBuffer);
_bufferAlloc += currentSize;
/* Delete the old buffer */
extensions->getForge()->free(oldBuffer);
}
}
return result;
}
示例3: OMRPORT_ACCESS_FROM_OMRPORT
/**
* Probe the file system for existing files. Determine
* the first number which is unused, or the number of the oldest
* file if all numbers are used.
* @return the first file number to use (starting at 0), or -1 on failure
*/
intptr_t
MM_VerboseWriterFileLogging::findInitialFile(MM_EnvironmentBase *env)
{
OMRPORT_ACCESS_FROM_OMRPORT(env->getPortLibrary());
MM_GCExtensionsBase *extensions = MM_GCExtensionsBase::getExtensions(env->getOmrVM());
int64_t oldestTime = J9CONST64(0x7FFFFFFFFFFFFFFF); /* the highest possible time. */
intptr_t oldestFile = 0;
if (_mode != rotating_files) {
/* nothing to do */
return 0;
}
for (uintptr_t currentFile = 0; currentFile < _numFiles; currentFile++) {
char *filenameToOpen = expandFilename(env, currentFile);
if (NULL == filenameToOpen) {
return -1;
}
int64_t thisTime = omrfile_lastmod(filenameToOpen);
extensions->getForge()->free(filenameToOpen);
if (thisTime < 0) {
/* file doesn't exist, or some other problem reading the file */
oldestFile = currentFile;
break;
} else if (thisTime < oldestTime) {
oldestTime = thisTime;
oldestFile = currentFile;
}
}
return oldestFile;
}
示例4: OMRPORT_ACCESS_FROM_OMRPORT
bool
MM_VerboseWriter::initialize(MM_EnvironmentBase* env)
{
OMRPORT_ACCESS_FROM_OMRPORT(env->getPortLibrary());
MM_GCExtensionsBase* ext = env->getExtensions();
/* Initialize _header */
const char* version = omrgc_get_version(env->getOmrVM());
/* The length is -2 for the "%s" in VERBOSEGC_HEADER and +1 for '\0' */
uintptr_t headerLength = strlen(version) + strlen(VERBOSEGC_HEADER) - 1;
_header = (char*)ext->getForge()->allocate(sizeof(char) * headerLength, OMR::GC::AllocationCategory::DIAGNOSTIC, OMR_GET_CALLSITE());
if (NULL == _header) {
return false;
}
omrstr_printf(_header, headerLength, VERBOSEGC_HEADER, version);
/* Initialize _footer */
uintptr_t footerLength = strlen(VERBOSEGC_FOOTER) + 1;
_footer = (char*)ext->getForge()->allocate(sizeof(char) * footerLength, OMR::GC::AllocationCategory::DIAGNOSTIC, OMR_GET_CALLSITE());
if (NULL == _footer) {
ext->getForge()->free(_header);
return false;
}
omrstr_printf(_footer, footerLength, VERBOSEGC_FOOTER);
return true;
}
示例5: preservedSlotObject
void
MM_CollectorLanguageInterfaceImpl::scavenger_fixupDestroyedSlot(MM_EnvironmentBase *env, MM_ForwardedHeader *forwardedHeader, MM_MemorySubSpaceSemiSpace *subSpaceNew)
{
/* This method must be implemented if (and only if) the object header is stored in a compressed slot. in that
* case the other half of the full (omrobjectptr_t sized) slot may hold a compressed object reference that
* must be restored by this method.
*/
/* This assumes that all slots are object slots, including the slot adjacent to the header slot */
if ((0 != forwardedHeader->getPreservedOverlap()) && !_extensions->objectModel.isIndexable(forwardedHeader)) {
MM_GCExtensionsBase *extensions = MM_GCExtensionsBase::getExtensions(_omrVM);
/* Get the uncompressed reference from the slot */
fomrobject_t preservedOverlap = (fomrobject_t)forwardedHeader->getPreservedOverlap();
GC_SlotObject preservedSlotObject(_omrVM, &preservedOverlap);
omrobjectptr_t survivingCopyAddress = preservedSlotObject.readReferenceFromSlot();
/* Check if the address we want to read is aligned (since mis-aligned reads may still be less than a top address but extend beyond it) */
if (0 == ((uintptr_t)survivingCopyAddress & (extensions->getObjectAlignmentInBytes() - 1))) {
/* Ensure that the address we want to read is within part of the heap which could contain copied objects (tenure or survivor) */
void *topOfObject = (void *)((uintptr_t *)survivingCopyAddress + 1);
if (subSpaceNew->isObjectInNewSpace(survivingCopyAddress, topOfObject) || extensions->isOld(survivingCopyAddress, topOfObject)) {
/* if the slot points to a reverse-forwarded object, restore the original location (in evacuate space) */
MM_ForwardedHeader reverseForwardedHeader(survivingCopyAddress);
if (reverseForwardedHeader.isReverseForwardedPointer()) {
/* overlapped slot must be fixed up */
fomrobject_t fixupSlot = 0;
GC_SlotObject fixupSlotObject(_omrVM, &fixupSlot);
fixupSlotObject.writeReferenceToSlot(reverseForwardedHeader.getReverseForwardedPointer());
forwardedHeader->restoreDestroyedOverlap((uint32_t)fixupSlot);
}
}
}
}
}
示例6: tearDown
/**
* Free the buffer object
*/
void
MM_VerboseBuffer::kill(MM_EnvironmentBase *env)
{
tearDown(env);
MM_GCExtensionsBase *extensions = MM_GCExtensionsBase::getExtensions(env->getOmrVM());
extensions->getForge()->free(this);
}
示例7:
void
MM_VerboseWriter::tearDown(MM_EnvironmentBase* env)
{
MM_GCExtensionsBase* ext = env->getExtensions();
ext->getForge()->free(_header);
_header = NULL;
ext->getForge()->free(_footer);
_footer = NULL;
}
示例8:
bool
MM_ConfigurationStandard::initialize(MM_EnvironmentBase* env)
{
MM_GCExtensionsBase* extensions = env->getExtensions();
bool result = MM_Configuration::initialize(env);
if (result) {
extensions->payAllocationTax = extensions->isConcurrentMarkEnabled() || extensions->isConcurrentSweepEnabled();
extensions->setStandardGC(true);
}
return result;
}
示例9:
int J9THREAD_PROC
MM_MasterGCThread::master_thread_proc(void *info)
{
MM_MasterGCThread *masterGCThread = (MM_MasterGCThread*)info;
MM_GCExtensionsBase *extensions = masterGCThread->_extensions;
OMR_VM *omrVM = extensions->getOmrVM();
OMRPORT_ACCESS_FROM_OMRVM(omrVM);
uintptr_t rc = 0;
omrsig_protect(master_thread_proc2, info,
((MM_ParallelDispatcher *)extensions->dispatcher)->getSignalHandler(), omrVM,
OMRPORT_SIG_FLAG_SIGALLSYNC | OMRPORT_SIG_FLAG_MAY_CONTINUE_EXECUTION,
&rc);
return 0;
}
示例10: OMR_GC_SystemCollect
omr_error_t
OMR_GC_SystemCollect(OMR_VMThread* omrVMThread, uint32_t gcCode)
{
MM_EnvironmentBase *env = MM_EnvironmentBase::getEnvironment(omrVMThread);
MM_GCExtensionsBase *extensions = MM_GCExtensionsBase::getExtensions(omrVMThread->_vm);
/* Lazily create the collector, if necessary. */
if (NULL == extensions->getGlobalCollector()) {
if (OMR_ERROR_NONE != OMR_GC_InitializeCollector(omrVMThread)) {
return OMR_ERROR_INTERNAL;
}
}
extensions->heap->systemGarbageCollect(env, gcCode);
return OMR_ERROR_NONE;
}
示例11: OMR_GC_SystemCollect
omr_error_t
OMR_GC_SystemCollect(OMR_VMThread* omrVMThread, uint32_t gcCode)
{
omr_error_t result = OMR_ERROR_NONE;
MM_EnvironmentBase *env = MM_EnvironmentBase::getEnvironment(omrVMThread);
MM_GCExtensionsBase *extensions = env->getExtensions();
if (NULL == extensions->getGlobalCollector()) {
result = OMR_GC_InitializeCollector(omrVMThread);
}
if (OMR_ERROR_NONE == result) {
extensions->heap->systemGarbageCollect(env, gcCode);
}
return result;
}
示例12:
MM_VerboseHandlerOutput *
MM_VerboseHandlerOutput::newInstance(MM_EnvironmentBase *env, MM_VerboseManager *manager)
{
MM_GCExtensionsBase* extensions = MM_GCExtensionsBase::getExtensions(env->getOmrVM());
MM_VerboseHandlerOutput *verboseHandlerOutput = (MM_VerboseHandlerOutput*)extensions->getForge()->allocate(sizeof(MM_VerboseHandlerOutput), OMR::GC::AllocationCategory::FIXED, OMR_GET_CALLSITE());
if (NULL != verboseHandlerOutput) {
new(verboseHandlerOutput) MM_VerboseHandlerOutput(extensions);
if(!verboseHandlerOutput->initialize(env, manager)) {
verboseHandlerOutput->kill(env);
verboseHandlerOutput = NULL;
}
}
return verboseHandlerOutput;
}
示例13:
MM_VerboseManagerImpl *
MM_VerboseManagerImpl::newInstance(MM_EnvironmentBase *env, OMR_VM* vm)
{
MM_GCExtensionsBase* extensions = MM_GCExtensionsBase::getExtensions(vm);
MM_VerboseManagerImpl *verboseManager = (MM_VerboseManagerImpl *)extensions->getForge()->allocate(sizeof(MM_VerboseManagerImpl), OMR::GC::AllocationCategory::FIXED, OMR_GET_CALLSITE());
if (verboseManager) {
new(verboseManager) MM_VerboseManagerImpl(vm);
if(!verboseManager->initialize(env)) {
verboseManager->kill(env);
verboseManager = NULL;
}
}
return verboseManager;
}
示例14: getWriteBarrierType
static MM_GCWriteBarrierType getWriteBarrierType(MM_EnvironmentBase* env)
{
MM_GCWriteBarrierType writeBarrierType = gc_modron_wrtbar_none;
MM_GCExtensionsBase* extensions = env->getExtensions();
if (extensions->isScavengerEnabled()) {
if (extensions->isConcurrentMarkEnabled()) {
writeBarrierType = gc_modron_wrtbar_cardmark_and_oldcheck;
} else {
writeBarrierType = gc_modron_wrtbar_oldcheck;
}
} else if (extensions->isConcurrentMarkEnabled()) {
writeBarrierType = gc_modron_wrtbar_cardmark;
}
return writeBarrierType;
}
示例15: OMR_GC_Allocate
omrobjectptr_t
OMR_GC_Allocate(OMR_VMThread * omrVMThread, size_t sizeInBytes, uintptr_t flags)
{
omrobjectptr_t heapBytes = allocHelper(omrVMThread, sizeInBytes, flags, true);
if (NULL == heapBytes) {
MM_GCExtensionsBase *extensions = MM_GCExtensionsBase::getExtensions(omrVMThread->_vm);
if (NULL == extensions->getGlobalCollector()) {
/* Lazily create the collector and try to allocate again. */
if (OMR_ERROR_NONE == OMR_GC_InitializeCollector(omrVMThread)) {
heapBytes = allocHelper(omrVMThread, sizeInBytes, flags, true);
}
}
}
return heapBytes;
}