@@ -4515,14 +4515,26 @@ size_t getRSS_Kb()
4515
4515
return rss;
4516
4516
}
4517
4517
4518
+ #if defined(J9VM_OPT_SHARED_CLASSES) && defined(LINUX)
4519
+ void disclaimSharedClassCache (TR_J9SharedCache *sharedCache, uint64_t crtElapsedTime)
4520
+ {
4521
+ size_t rssBefore = getRSS_Kb ();
4522
+ int32_t numDisclaimed = sharedCache->disclaimSharedCaches ();
4523
+ size_t rssAfter = getRSS_Kb ();
4524
+ if (TR::Options::getCmdLineOptions ()->getVerboseOption (TR_VerbosePerformance))
4525
+ TR_VerboseLog::writeLineLocked (TR_Vlog_PERF, " t=%u JIT disclaimed %d SCC segments RSS before=%zu KB, RSS after=%zu KB, delta=%zd KB = %5.2f%%" ,
4526
+ (uint32_t )crtElapsedTime, numDisclaimed, rssBefore, rssAfter, rssBefore - rssAfter, ((long )(rssAfter - rssBefore) * 100.0 / rssBefore));
4527
+ }
4528
+ #endif // defined(J9VM_OPT_SHARED_CLASSES) && defined(LINUX)
4529
+
4518
4530
void disclaimDataCaches (uint64_t crtElapsedTime)
4519
4531
{
4520
4532
size_t rssBefore = getRSS_Kb ();
4521
4533
int numDisclaimed = TR_DataCacheManager::getManager ()->disclaimAllDataCaches ();
4522
4534
size_t rssAfter = getRSS_Kb ();
4523
4535
if (TR::Options::getCmdLineOptions ()->getVerboseOption (TR_VerbosePerformance))
4524
- TR_VerboseLog::writeLineLocked (TR_Vlog_PERF, " t=%u JIT disclaimed %d Data Cache segments RSS before=%zu KB, RSS after=%zu KB, delta=%zu KB" ,
4525
- (uint32_t )crtElapsedTime, numDisclaimed, rssBefore, rssAfter, rssBefore - rssAfter);
4536
+ TR_VerboseLog::writeLineLocked (TR_Vlog_PERF, " t=%u JIT disclaimed %d Data Cache segments RSS before=%zu KB, RSS after=%zu KB, delta=%zd KB = %5.2f%% " ,
4537
+ (uint32_t )crtElapsedTime, numDisclaimed, rssBefore, rssAfter, rssBefore - rssAfter, (( long )(rssAfter - rssBefore) * 100.0 / rssBefore) );
4526
4538
}
4527
4539
4528
4540
void disclaimIProfilerSegments (uint64_t crtElapsedTime)
@@ -4535,8 +4547,8 @@ void disclaimIProfilerSegments(uint64_t crtElapsedTime)
4535
4547
int numSegDisclaimed = iprofilerAllocator->disclaimAllSegments ();
4536
4548
size_t rssAfter = getRSS_Kb ();
4537
4549
if (TR::Options::getCmdLineOptions ()->getVerboseOption (TR_VerbosePerformance))
4538
- TR_VerboseLog::writeLineLocked (TR_Vlog_PERF, " t=%u JIT disclaimed %d IProfiler segments out of %d. RSS before=%zu KB, RSS after=%zu KB, delta=%zu KB" ,
4539
- (uint32_t )crtElapsedTime, numSegDisclaimed, iprofilerAllocator->getNumSegments (), rssBefore, rssAfter, rssBefore - rssAfter);
4550
+ TR_VerboseLog::writeLineLocked (TR_Vlog_PERF, " t=%u JIT disclaimed %d IProfiler segments out of %d. RSS before=%zu KB, RSS after=%zu KB, delta=%zd KB = %5.2f%% " ,
4551
+ (uint32_t )crtElapsedTime, numSegDisclaimed, iprofilerAllocator->getNumSegments (), rssBefore, rssAfter, rssBefore - rssAfter, (( long )(rssAfter - rssBefore) * 100.0 / rssBefore) );
4540
4552
}
4541
4553
}
4542
4554
@@ -4546,7 +4558,7 @@ void disclaimCodeCaches(uint64_t crtElapsedTime)
4546
4558
int numDisclaimed = TR::CodeCacheManager::instance ()->disclaimAllCodeCaches ();
4547
4559
size_t rssAfter = getRSS_Kb ();
4548
4560
if (TR::Options::getCmdLineOptions ()->getVerboseOption (TR_VerbosePerformance))
4549
- TR_VerboseLog::writeLineLocked (TR_Vlog_PERF, " t=%u JIT disclaimed %d Code Caches RSS before=%zu KB, RSS after=%zu KB, delta=%zu KB = %5.2f%%" ,
4561
+ TR_VerboseLog::writeLineLocked (TR_Vlog_PERF, " t=%u JIT disclaimed %d Code Caches RSS before=%zu KB, RSS after=%zu KB, delta=%zd KB = %5.2f%%" ,
4550
4562
(uint32_t )crtElapsedTime, numDisclaimed, rssBefore, rssAfter, rssBefore - rssAfter, ((long )(rssAfter - rssBefore) * 100.0 / rssBefore));
4551
4563
}
4552
4564
@@ -4557,6 +4569,7 @@ void memoryDisclaimLogic(TR::CompilationInfo *compInfo, uint64_t crtElapsedTime,
4557
4569
static uint64_t lastCodeCacheDisclaimTime = 0 ;
4558
4570
static int32_t lastNumAllocatedCodeCaches = 0 ;
4559
4571
static uint64_t lastIProfilerDisclaimTime = 0 ;
4572
+ static uint64_t lastSCCDisclaimTime = 0 ;
4560
4573
static uint32_t lastNumCompilationsDuringIProfilerDisclaim = 0 ;
4561
4574
4562
4575
J9JITConfig *jitConfig = compInfo->getJITConfig ();
@@ -4571,6 +4584,20 @@ void memoryDisclaimLogic(TR::CompilationInfo *compInfo, uint64_t crtElapsedTime,
4571
4584
if (javaVM->phase != J9VM_PHASE_NOT_STARTUP || jitState == STARTUP_STATE)
4572
4585
return ;
4573
4586
4587
+ #if defined(J9VM_OPT_SHARED_CLASSES) && defined(LINUX)
4588
+ TR_J9VMBase *fej9 = TR_J9VMBase::get (jitConfig, compInfo->getSamplerThread (), TR_J9VMBase::AOT_VM);
4589
+ TR_J9SharedCache *sharedCache = fej9->sharedCache ();
4590
+ if (sharedCache && sharedCache->isDisclaimEnabled ())
4591
+ {
4592
+ // Disclaim if there was a large time interval since the last disclaim
4593
+ if (crtElapsedTime > lastSCCDisclaimTime + 12 * TR::Options::_minTimeBetweenMemoryDisclaims)
4594
+ {
4595
+ disclaimSharedClassCache (sharedCache, crtElapsedTime);
4596
+ lastSCCDisclaimTime = crtElapsedTime;
4597
+ }
4598
+ }
4599
+ #endif // defined(J9VM_OPT_SHARED_CLASSES) && defined(LINUX)
4600
+
4574
4601
if (TR_DataCacheManager::getManager ()->isDisclaimEnabled ())
4575
4602
{
4576
4603
// Ensure we don't do it too often
0 commit comments