Skip to content

Commit 784b381

Browse files
authored
Merge pull request #23877 from shadman2606/slide-compact
Add support for Nursery only compact
2 parents ae68128 + ebe2819 commit 784b381

3 files changed

Lines changed: 33 additions & 5 deletions

File tree

runtime/gc_glue_java/CompactDelegate.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,9 @@ MM_CompactDelegate::verifyHeap(MM_EnvironmentBase *env, MM_MarkMap *markMap)
116116
}
117117

118118
void
119-
MM_CompactDelegate::fixupRoots(MM_EnvironmentBase *env, MM_CompactScheme *compactScheme)
119+
MM_CompactDelegate::fixupRoots(MM_EnvironmentBase *env, MM_CompactScheme *compactScheme, bool nurseryOnly)
120120
{
121-
MM_CompactSchemeFixupRoots rootScanner(env, compactScheme);
121+
MM_CompactSchemeFixupRoots rootScanner(env, compactScheme, nurseryOnly);
122122
rootScanner.scanAllSlots(env);
123123
}
124124

runtime/gc_glue_java/CompactDelegate.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ class MM_CompactDelegate
7272

7373
void verifyHeap(MM_EnvironmentBase *env, MM_MarkMap *markMap);
7474

75-
void fixupRoots(MM_EnvironmentBase *env, MM_CompactScheme *compactScheme);
75+
void fixupRoots(MM_EnvironmentBase *env, MM_CompactScheme *compactScheme, bool nurseryOnly = false);
7676

7777
void workerCleanupAfterGC(MM_EnvironmentBase *env);
7878

runtime/gc_glue_java/CompactSchemeFixupRoots.hpp

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,20 @@
3333

3434
class MM_CompactSchemeFixupRoots : public MM_RootScanner {
3535
private:
36-
MM_CompactScheme* _compactScheme;
36+
#if defined(J9VM_GC_MODRON_SCAVENGER)
37+
MM_CompactSchemeFixupObject _fixupObject;
38+
bool _nurseryOnly; /**< if true, Nursery is only compacted and Tenure fixed-up via RS, otherwise whole heap is compacted/fixed-up */
39+
#endif /* defined(J9VM_GC_MODRON_SCAVENGER) */
40+
41+
MM_CompactScheme *_compactScheme;
3742

3843
public:
39-
MM_CompactSchemeFixupRoots(MM_EnvironmentBase *env, MM_CompactScheme* compactScheme) :
44+
MM_CompactSchemeFixupRoots(MM_EnvironmentBase *env, MM_CompactScheme *compactScheme, bool nurseryOnly = false) :
4045
MM_RootScanner(env),
46+
#if defined(J9VM_GC_MODRON_SCAVENGER)
47+
_fixupObject(env, compactScheme),
48+
_nurseryOnly(nurseryOnly),
49+
#endif /* defined(J9VM_GC_MODRON_SCAVENGER) */
4150
_compactScheme(compactScheme)
4251
{
4352
setIncludeStackFrameClassReferences(false);
@@ -99,6 +108,25 @@ class MM_CompactSchemeFixupRoots : public MM_RootScanner {
99108
reportScanningEnded(RootScannerEntity_ContinuationObjects);
100109
}
101110

111+
#if defined(J9VM_GC_MODRON_SCAVENGER)
112+
virtual void doRememberedSetSlot(J9Object **slotPtr, GC_RememberedSetSlotIterator *rememberedSetSlotIterator)
113+
{
114+
if (_nurseryOnly) {
115+
/* Objects in Tenure did not move -> no need to fix up RS slots.
116+
* Object in Nursery moved -> slots of remembered objects in Nursery need to fix up.
117+
*/
118+
_fixupObject.fixupObject(MM_EnvironmentStandard::getEnvironment(_env), *slotPtr);
119+
} else {
120+
/* Objects in tenure moved -> need to fix up RS slots.
121+
* Remembered (Tenured) object slots have been already fixed up by now (as any other object slots).
122+
*/
123+
MM_RootScanner::doRememberedSetSlot(slotPtr, rememberedSetSlotIterator);
124+
}
125+
}
126+
#endif /* defined(J9VM_GC_MODRON_SCAVENGER) */
127+
128+
129+
102130
private:
103131
#if defined(J9VM_GC_FINALIZATION)
104132
void fixupFinalizableObjects(MM_EnvironmentBase *env);

0 commit comments

Comments
 (0)