48
48
void
49
49
MM_ScavengerRootScanner::startContinuationProcessing (MM_EnvironmentBase *env)
50
50
{
51
- if (J9MODRON_HANDLE_NEXT_WORK_UNIT (env)) {
51
+ if (J9MODRON_HANDLE_NEXT_WORK_UNIT (env)) {
52
52
_scavengerDelegate->setShouldScavengeContinuationObjects (false );
53
53
_scavengerDelegate->setShouldIterateContinuationObjects (false );
54
54
55
55
MM_HeapRegionDescriptorStandard *region = NULL ;
56
56
GC_HeapRegionIteratorStandard regionIterator (env->getExtensions ()->getHeap ()->getHeapRegionManager ());
57
- while (NULL != (region = regionIterator.nextRegion ())) {
57
+ while (NULL != (region = regionIterator.nextRegion ())) {
58
58
MM_HeapRegionDescriptorStandardExtension *regionExtension = MM_ConfigurationDelegate::getHeapRegionDescriptorStandardExtension (env, region);
59
- for (UDATA i = 0 ; i < regionExtension->_maxListIndex ; i++) {
59
+ for (uintptr_t i = 0 ; i < regionExtension->_maxListIndex ; i++) {
60
60
MM_ContinuationObjectList *list = ®ionExtension->_continuationObjectLists [i];
61
61
if (!list->isEmpty ()) {
62
62
_scavengerDelegate->setShouldIterateContinuationObjects (true );
@@ -66,6 +66,8 @@ MM_ScavengerRootScanner::startContinuationProcessing(MM_EnvironmentBase *env)
66
66
if (!list->wasEmpty ()) {
67
67
_scavengerDelegate->setShouldScavengeContinuationObjects (true );
68
68
}
69
+ } else {
70
+ list->backupList ();
69
71
}
70
72
}
71
73
}
@@ -76,15 +78,15 @@ MM_ScavengerRootScanner::startContinuationProcessing(MM_EnvironmentBase *env)
76
78
void
77
79
MM_ScavengerRootScanner::startUnfinalizedProcessing (MM_EnvironmentBase *env)
78
80
{
79
- if (J9MODRON_HANDLE_NEXT_WORK_UNIT (env)) {
81
+ if (J9MODRON_HANDLE_NEXT_WORK_UNIT (env)) {
80
82
_scavengerDelegate->setShouldScavengeUnfinalizedObjects (false );
81
83
82
84
MM_HeapRegionDescriptorStandard *region = NULL ;
83
85
GC_HeapRegionIteratorStandard regionIterator (env->getExtensions ()->getHeap ()->getHeapRegionManager ());
84
- while (NULL != (region = regionIterator.nextRegion ())) {
86
+ while (NULL != (region = regionIterator.nextRegion ())) {
85
87
if ((MEMORY_TYPE_NEW == (region->getTypeFlags () & MEMORY_TYPE_NEW))) {
86
88
MM_HeapRegionDescriptorStandardExtension *regionExtension = MM_ConfigurationDelegate::getHeapRegionDescriptorStandardExtension (env, region);
87
- for (UDATA i = 0 ; i < regionExtension->_maxListIndex ; i++) {
89
+ for (uintptr_t i = 0 ; i < regionExtension->_maxListIndex ; i++) {
88
90
MM_UnfinalizedObjectList *list = ®ionExtension->_unfinalizedObjectLists [i];
89
91
list->startUnfinalizedProcessing ();
90
92
if (!list->wasEmpty ()) {
@@ -99,7 +101,7 @@ MM_ScavengerRootScanner::startUnfinalizedProcessing(MM_EnvironmentBase *env)
99
101
void
100
102
MM_ScavengerRootScanner::scavengeFinalizableObjects (MM_EnvironmentStandard *env)
101
103
{
102
- GC_FinalizeListManager * const finalizeListManager = _extensions->finalizeListManager ;
104
+ GC_FinalizeListManager *const finalizeListManager = _extensions->finalizeListManager ;
103
105
bool const compressed = _extensions->compressObjectReferences ();
104
106
105
107
/* this code must be run single-threaded and we should only be here if work is actually required */
@@ -113,7 +115,7 @@ MM_ScavengerRootScanner::scavengeFinalizableObjects(MM_EnvironmentStandard *env)
113
115
omrobjectptr_t systemObject = finalizeListManager->resetSystemFinalizableObjects ();
114
116
while (NULL != systemObject) {
115
117
omrobjectptr_t next = NULL ;
116
- if (_scavenger->isObjectInEvacuateMemory (systemObject)) {
118
+ if (_scavenger->isObjectInEvacuateMemory (systemObject)) {
117
119
MM_ForwardedHeader forwardedHeader (systemObject, compressed);
118
120
if (!forwardedHeader.isForwardedPointer ()) {
119
121
next = _extensions->accessBarrier ->getFinalizeLink (systemObject);
@@ -145,7 +147,7 @@ MM_ScavengerRootScanner::scavengeFinalizableObjects(MM_EnvironmentStandard *env)
145
147
omrobjectptr_t defaultObject = finalizeListManager->resetDefaultFinalizableObjects ();
146
148
while (NULL != defaultObject) {
147
149
omrobjectptr_t next = NULL ;
148
- if (_scavenger->isObjectInEvacuateMemory (defaultObject)) {
150
+ if (_scavenger->isObjectInEvacuateMemory (defaultObject)) {
149
151
MM_ForwardedHeader forwardedHeader (defaultObject, compressed);
150
152
if (!forwardedHeader.isForwardedPointer ()) {
151
153
next = _extensions->accessBarrier ->getFinalizeLink (defaultObject);
@@ -177,7 +179,7 @@ MM_ScavengerRootScanner::scavengeFinalizableObjects(MM_EnvironmentStandard *env)
177
179
omrobjectptr_t referenceObject = finalizeListManager->resetReferenceObjects ();
178
180
while (NULL != referenceObject) {
179
181
omrobjectptr_t next = NULL ;
180
- if (_scavenger->isObjectInEvacuateMemory (referenceObject)) {
182
+ if (_scavenger->isObjectInEvacuateMemory (referenceObject)) {
181
183
MM_ForwardedHeader forwardedHeader (referenceObject, compressed);
182
184
if (!forwardedHeader.isForwardedPointer ()) {
183
185
next = _extensions->accessBarrier ->getReferenceLink (referenceObject);
0 commit comments