Skip to content

Commit

Permalink
RamClass: Segment allocation enhancements
Browse files Browse the repository at this point in the history
The changes reflect the feature request #20644.

Adding segment categories for RAMClass fragments:
sub4G
Frequently accessed
Infrequently accessed

Closes: #20644
Signed-off-by: Nick Kamal <[email protected]>
  • Loading branch information
h3110n3rv3 committed Jan 20, 2025
1 parent 30f423a commit 7fc2a01
Show file tree
Hide file tree
Showing 3 changed files with 358 additions and 226 deletions.
147 changes: 98 additions & 49 deletions runtime/jcl/common/mgmtmemory.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ static UDATA getIndexFromGCID(J9JavaLangManagementData *mgmt, UDATA id);
jobject JNICALL
Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getHeapMemoryUsageImpl(JNIEnv *env, jobject beanInstance, jclass memoryUsage, jobject memUsageConstructor)
{
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;
jlong used = 0;
jlong committed = 0;
jmethodID ctor = NULL;
Expand All @@ -51,7 +51,7 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getHeapMemoryUsageIm
jobject JNICALL
Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getNonHeapMemoryUsageImpl(JNIEnv *env, jobject beanInstance, jclass memoryUsage, jobject memUsageConstructor)
{
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;
J9JavaLangManagementData *mgmt = javaVM->managementData;
jlong used = 0;
jlong committed = 0;
Expand All @@ -76,25 +76,74 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getNonHeapMemoryUsag
omrthread_monitor_enter(javaVM->classTableMutex);
classLoader = javaVM->internalVMFunctions->allClassLoadersStartDo(&walkState, javaVM, 0);
while (NULL != classLoader) {
UDATA *udataFreeListBlock = classLoader->ramClassUDATABlockFreeList;
J9RAMClassFreeListBlock *tinyFreeListBlock = classLoader->ramClassTinyBlockFreeList;
J9RAMClassFreeListBlock *smallFreeListBlock = classLoader->ramClassSmallBlockFreeList;
J9RAMClassFreeListBlock *largeFreeListBlock = classLoader->ramClassLargeBlockFreeList;
while (NULL != udataFreeListBlock) {
J9RAMClassFreeLists *sub4gBlockPtr = &classLoader->sub4gBlock;
J9RAMClassFreeLists *frequentlyAccessedBlockPtr = &classLoader->frequentlyAccessedBlock;
J9RAMClassFreeLists *inFrequentlyAccessedBlockPtr = &classLoader->inFrequentlyAccessedBlock;
UDATA *ramClassSub4gUDATABlockFreeListPtr = sub4gBlockPtr->ramClassUDATABlockFreeList;
UDATA *ramClassFreqUDATABlockFreeListPtr = frequentlyAccessedBlockPtr->ramClassUDATABlockFreeList;
UDATA *ramClassInFreqUDATABlockFreeListPtr = inFrequentlyAccessedBlockPtr->ramClassUDATABlockFreeList;
while (NULL != ramClassSub4gUDATABlockFreeListPtr) {
used -= sizeof(UDATA);
udataFreeListBlock = *(UDATA **) udataFreeListBlock;
ramClassSub4gUDATABlockFreeListPtr = *(UDATA **)ramClassSub4gUDATABlockFreeListPtr;
}
while (NULL != tinyFreeListBlock) {
used -= tinyFreeListBlock->size;
tinyFreeListBlock = tinyFreeListBlock->nextFreeListBlock;
while (NULL != ramClassFreqUDATABlockFreeListPtr) {
used -= sizeof(UDATA);
ramClassFreqUDATABlockFreeListPtr = *(UDATA **)ramClassFreqUDATABlockFreeListPtr;
}
while (NULL != ramClassInFreqUDATABlockFreeListPtr) {
used -= sizeof(UDATA);
ramClassInFreqUDATABlockFreeListPtr = *(UDATA **)ramClassInFreqUDATABlockFreeListPtr;
}
if (NULL != sub4gBlockPtr) {
J9RAMClassFreeListBlock *ramClassTinyBlockFreeListPtr = sub4gBlockPtr->ramClassTinyBlockFreeList;
J9RAMClassFreeListBlock *ramClassSmallBlockFreeListPtr = sub4gBlockPtr->ramClassSmallBlockFreeList;
J9RAMClassFreeListBlock *ramClassLargeBlockFreeListPtr = sub4gBlockPtr->ramClassLargeBlockFreeList;
while (NULL != ramClassTinyBlockFreeListPtr) {
used -= ramClassTinyBlockFreeListPtr->size;
ramClassTinyBlockFreeListPtr = ramClassTinyBlockFreeListPtr->nextFreeListBlock;
}
while (NULL != ramClassSmallBlockFreeListPtr) {
used -= ramClassSmallBlockFreeListPtr->size;
ramClassSmallBlockFreeListPtr = ramClassSmallBlockFreeListPtr->nextFreeListBlock;
}
while (NULL != ramClassLargeBlockFreeListPtr) {
used -= ramClassLargeBlockFreeListPtr->size;
ramClassLargeBlockFreeListPtr = ramClassLargeBlockFreeListPtr->nextFreeListBlock;
}
}
while (NULL != smallFreeListBlock) {
used -= smallFreeListBlock->size;
smallFreeListBlock = smallFreeListBlock->nextFreeListBlock;
if (NULL != frequentlyAccessedBlockPtr) {
J9RAMClassFreeListBlock *ramClassTinyBlockFreeListPtr = frequentlyAccessedBlockPtr->ramClassTinyBlockFreeList;
J9RAMClassFreeListBlock *ramClassSmallBlockFreeListPtr = frequentlyAccessedBlockPtr->ramClassSmallBlockFreeList;
J9RAMClassFreeListBlock *ramClassLargeBlockFreeListPtr = frequentlyAccessedBlockPtr->ramClassLargeBlockFreeList;
while (NULL != ramClassTinyBlockFreeListPtr) {
used -= ramClassTinyBlockFreeListPtr->size;
ramClassTinyBlockFreeListPtr = ramClassTinyBlockFreeListPtr->nextFreeListBlock;
}
while (NULL != ramClassSmallBlockFreeListPtr) {
used -= ramClassSmallBlockFreeListPtr->size;
ramClassSmallBlockFreeListPtr = ramClassSmallBlockFreeListPtr->nextFreeListBlock;
}
while (NULL != ramClassLargeBlockFreeListPtr) {
used -= ramClassLargeBlockFreeListPtr->size;
ramClassLargeBlockFreeListPtr = ramClassLargeBlockFreeListPtr->nextFreeListBlock;
}
}
while (NULL != largeFreeListBlock) {
used -= largeFreeListBlock->size;
largeFreeListBlock = largeFreeListBlock->nextFreeListBlock;
if (NULL != inFrequentlyAccessedBlockPtr) {
J9RAMClassFreeListBlock *ramClassTinyBlockFreeListPtr = inFrequentlyAccessedBlockPtr->ramClassTinyBlockFreeList;
J9RAMClassFreeListBlock *ramClassSmallBlockFreeListPtr = inFrequentlyAccessedBlockPtr->ramClassSmallBlockFreeList;
J9RAMClassFreeListBlock *ramClassLargeBlockFreeListPtr = inFrequentlyAccessedBlockPtr->ramClassLargeBlockFreeList;
while (NULL != ramClassTinyBlockFreeListPtr) {
used -= ramClassTinyBlockFreeListPtr->size;
ramClassTinyBlockFreeListPtr = ramClassTinyBlockFreeListPtr->nextFreeListBlock;
}
while (NULL != ramClassSmallBlockFreeListPtr) {
used -= ramClassSmallBlockFreeListPtr->size;
ramClassSmallBlockFreeListPtr = ramClassSmallBlockFreeListPtr->nextFreeListBlock;
}
while (NULL != ramClassLargeBlockFreeListPtr) {
used -= ramClassLargeBlockFreeListPtr->size;
ramClassLargeBlockFreeListPtr = ramClassLargeBlockFreeListPtr->nextFreeListBlock;
}
}
classLoader = javaVM->internalVMFunctions->allClassLoadersNextDo(&walkState);
}
Expand Down Expand Up @@ -166,7 +215,7 @@ jint JNICALL
Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getObjectPendingFinalizationCountImpl(JNIEnv *env, jobject beanInstance)
{
#if defined(J9VM_GC_FINALIZATION)
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;
return (jint)javaVM->memoryManagerFunctions->j9gc_get_objects_pending_finalization_count(javaVM);
#else
return (jint)0;
Expand All @@ -176,15 +225,15 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getObjectPendingFina
jboolean JNICALL
Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_isVerboseImpl(JNIEnv *env, jobject beanInstance)
{
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;

return VERBOSE_GC == (VERBOSE_GC & javaVM->verboseLevel) ;
}

void JNICALL
Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_setVerboseImpl(JNIEnv *env, jobject beanInstance, jboolean flag)
{
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;
J9VerboseSettings verboseOptions;

memset(&verboseOptions, 0, sizeof(J9VerboseSettings));
Expand All @@ -197,7 +246,7 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_setVerboseImpl(JNIEn
void JNICALL
Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_createMemoryManagers(JNIEnv *env, jobject beanInstance)
{
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;
jclass memBean = NULL;
jstring childName = NULL;
jmethodID helperID = NULL;
Expand Down Expand Up @@ -234,7 +283,7 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_createMemoryManagers
}

for (idx = 0; idx < mgmt->supportedCollectors; ++idx) {
id = (jint) mgmt->garbageCollectors[idx].id;
id = (jint)mgmt->garbageCollectors[idx].id;
childName = (*env)->NewStringUTF(env, mgmt->garbageCollectors[idx].name);
if (NULL == childName) {
return;
Expand All @@ -247,7 +296,7 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_createMemoryManagers
void JNICALL
Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_createMemoryPools(JNIEnv *env, jobject beanInstance)
{
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;
jclass memBean = NULL;
jstring childName = NULL;
jmethodID helperID = NULL;
Expand All @@ -267,7 +316,7 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_createMemoryPools(JN

/* Heap Memory Pools */
for (idx = 0; idx < mgmt->supportedMemoryPools; ++idx) {
id = (jint) mgmt->memoryPools[idx].id;
id = (jint)mgmt->memoryPools[idx].id;
childName = (*env)->NewStringUTF(env, mgmt->memoryPools[idx].name);
if (NULL == childName) {
return;
Expand All @@ -281,7 +330,7 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_createMemoryPools(JN

/* NonHeap Memory Pools */
for (idx = 0; idx < mgmt->supportedNonHeapMemoryPools; ++idx) {
id = (jint) mgmt->nonHeapMemoryPools[idx].id;
id = (jint)mgmt->nonHeapMemoryPools[idx].id;
childName = (*env)->NewStringUTF(env, mgmt->nonHeapMemoryPools[idx].name);
if (NULL == childName) {
return;
Expand All @@ -297,15 +346,15 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_createMemoryPools(JN
jlong JNICALL
Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getMaxHeapSizeLimitImpl(JNIEnv *env, jobject beanInstance)
{
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;

return javaVM->memoryManagerFunctions->j9gc_get_maximum_heap_size(javaVM);
}

jlong JNICALL
Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getMaxHeapSizeImpl(JNIEnv *env, jobject beanInstance)
{
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;
UDATA softmx = javaVM->memoryManagerFunctions->j9gc_get_softmx(javaVM);

/* if no softmx has been set, report -Xmx instead as it is the current max heap size */
Expand All @@ -318,15 +367,15 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getMaxHeapSizeImpl(J
jlong JNICALL
Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getMinHeapSizeImpl(JNIEnv *env, jobject beanInstance)
{
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;

return javaVM->memoryManagerFunctions->j9gc_get_initial_heap_size(javaVM);
}

void JNICALL
Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_setMaxHeapSizeImpl(JNIEnv *env, jobject beanInstance, jlong newsoftmx)
{
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;

javaVM->memoryManagerFunctions->j9gc_set_softmx(javaVM, (UDATA)newsoftmx);
}
Expand All @@ -337,7 +386,7 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_setSharedClassCacheS
jboolean ret = JNI_FALSE;

#if defined(J9VM_OPT_SHARED_CLASSES)
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;

if (javaVM->sharedClassConfig) {
if (0 != javaVM->sharedClassConfig->setMinMaxBytes(javaVM, (U_32)value, -1, -1, -1, -1)) {
Expand All @@ -354,7 +403,7 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_setSharedClassCacheM
jboolean ret = JNI_FALSE;

#if defined(J9VM_OPT_SHARED_CLASSES)
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;

if (javaVM->sharedClassConfig) {
if (0 != javaVM->sharedClassConfig->setMinMaxBytes(javaVM, (U_32)-1, (I_32)value, -1, -1, -1)) {
Expand All @@ -371,7 +420,7 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_setSharedClassCacheM
jboolean ret = JNI_FALSE;

#if defined(J9VM_OPT_SHARED_CLASSES)
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;

if (javaVM->sharedClassConfig) {
if (0 != javaVM->sharedClassConfig->setMinMaxBytes(javaVM, (U_32)-1, -1, (I_32)value, -1, -1)) {
Expand All @@ -388,7 +437,7 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_setSharedClassCacheM
jboolean ret = JNI_FALSE;

#if defined(J9VM_OPT_SHARED_CLASSES)
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;

if (javaVM->sharedClassConfig) {
if (0 != javaVM->sharedClassConfig->setMinMaxBytes(javaVM, (U_32)-1, -1, -1, (I_32)value, -1)) {
Expand All @@ -405,7 +454,7 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_setSharedClassCacheM
jboolean ret = JNI_FALSE;

#if defined(J9VM_OPT_SHARED_CLASSES)
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;

if (javaVM->sharedClassConfig) {
if (0 != javaVM->sharedClassConfig->setMinMaxBytes(javaVM, (U_32)-1, -1, -1, -1, (I_32)value)) {
Expand All @@ -422,7 +471,7 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getSharedClassCacheS
U_32 ret = 0;

#if defined(J9VM_OPT_SHARED_CLASSES)
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;

if (javaVM->sharedClassConfig) {
javaVM->sharedClassConfig->getUnstoredBytes(javaVM, &ret, NULL, NULL);
Expand All @@ -437,7 +486,7 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getSharedClassCacheM
U_32 ret = 0;

#if defined(J9VM_OPT_SHARED_CLASSES)
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;

if (javaVM->sharedClassConfig) {
javaVM->sharedClassConfig->getUnstoredBytes(javaVM, NULL, &ret, NULL);
Expand All @@ -452,7 +501,7 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getSharedClassCacheM
U_32 ret = 0;

#if defined(J9VM_OPT_SHARED_CLASSES)
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;

if (javaVM->sharedClassConfig) {
javaVM->sharedClassConfig->getUnstoredBytes(javaVM, NULL, NULL, &ret);
Expand All @@ -470,7 +519,7 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_isSetMaxHeapSizeSupp
jstring JNICALL
Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getGCModeImpl(JNIEnv *env, jobject beanInstance)
{
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;
const char *gcMode = javaVM->memoryManagerFunctions->j9gc_get_gcmodestring(javaVM);

if (NULL != gcMode) {
Expand All @@ -483,7 +532,7 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getGCModeImpl(JNIEnv
jlong JNICALL
Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getGCMainThreadCpuUsedImpl(JNIEnv *env, jobject beanInstance)
{
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;
J9JavaLangManagementData *mgmt = javaVM->managementData;
jlong result = 0;

Expand All @@ -497,12 +546,12 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getGCMainThreadCpuUs
jlong JNICALL
Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getGCWorkerThreadsCpuUsedImpl(JNIEnv *env, jobject beanInstance)
{
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;
J9JavaLangManagementData *mgmt = javaVM->managementData;
jlong result = 0;

omrthread_rwmutex_enter_read(mgmt->managementDataLock);
result = (jlong) mgmt->gcWorkerCpuTime;
result = (jlong)mgmt->gcWorkerCpuTime;
omrthread_rwmutex_exit_read(mgmt->managementDataLock);

return result;
Expand All @@ -511,12 +560,12 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getGCWorkerThreadsCp
jint JNICALL
Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getMaximumGCThreadsImpl(JNIEnv *env, jobject beanInstance)
{
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;
J9JavaLangManagementData *mgmt = javaVM->managementData;
jint result = 0;

omrthread_rwmutex_enter_read(mgmt->managementDataLock);
result = (jint) mgmt->gcMaxThreads;
result = (jint)mgmt->gcMaxThreads;
omrthread_rwmutex_exit_read(mgmt->managementDataLock);

return result;
Expand All @@ -525,12 +574,12 @@ Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getMaximumGCThreadsI
jint JNICALL
Java_com_ibm_java_lang_management_internal_MemoryMXBeanImpl_getCurrentGCThreadsImpl(JNIEnv *env, jobject beanInstance)
{
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;
J9JavaLangManagementData *mgmt = javaVM->managementData;
jint result = 0;

omrthread_rwmutex_enter_read(mgmt->managementDataLock);
result = (jint) mgmt->gcCurrentThreads;
result = (jint)mgmt->gcCurrentThreads;
omrthread_rwmutex_exit_read(mgmt->managementDataLock);

return result;
Expand All @@ -541,7 +590,7 @@ void JNICALL
Java_com_ibm_lang_management_internal_MemoryNotificationThread_processNotificationLoop(JNIEnv *env, jobject threadInstance)
{
/* currently, the only notification queue is for the heap */
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;
J9JavaLangManagementData *mgmt = javaVM->managementData;
jclass threadClass = NULL;
jclass stringClass = NULL;
Expand Down Expand Up @@ -726,7 +775,7 @@ Java_com_ibm_lang_management_internal_MemoryNotificationThread_processNotificati
} else {
/* dispatch usage threshold Notification */
memoryPoolUsageThreshold *usageThreshold = notification->usageThreshold;
idx = (U_32) getIndexFromMemoryPoolID(mgmt, usageThreshold->poolID);
idx = (U_32)getIndexFromMemoryPoolID(mgmt, usageThreshold->poolID);
pool = &mgmt->memoryPools[idx];
poolName = poolNames[idx];
if (THRESHOLD_EXCEEDED == notification->type) {
Expand Down Expand Up @@ -788,7 +837,7 @@ void JNICALL
Java_com_ibm_lang_management_internal_MemoryNotificationThreadShutdown_sendShutdownNotification(JNIEnv *env, jobject instance)
{
/* currently, the only queue is the heap usage notification queue */
J9JavaVM *javaVM = ((J9VMThread *) env)->javaVM;
J9JavaVM *javaVM = ((J9VMThread *)env)->javaVM;
J9JavaLangManagementData *mgmt = javaVM->managementData;
J9MemoryNotification *notification = NULL;
J9MemoryNotification *next = NULL;
Expand Down Expand Up @@ -853,4 +902,4 @@ static UDATA getIndexFromGCID(J9JavaLangManagementData *mgmt, UDATA id)
}
}
return idx;
}
}
Loading

0 comments on commit 7fc2a01

Please sign in to comment.