@@ -395,44 +395,44 @@ MM_RootScanner::scanPermanentClasses(MM_EnvironmentBase *env)
395
395
{
396
396
reportScanningStarted (RootScannerEntity_PermanentClasses);
397
397
398
+ /* Do systemClassLoader */
399
+ scanClassloader (env, static_cast <J9JavaVM*>(_omrVM->_language_vm )->systemClassLoader );
400
+
401
+ /* Do applicationClassLoader */
402
+ scanClassloader (env, static_cast <J9JavaVM*>(_omrVM->_language_vm )->applicationClassLoader );
403
+
404
+ condYield ();
405
+
406
+ reportScanningEnded (RootScannerEntity_PermanentClasses);
407
+ }
408
+
409
+ /* *
410
+ * Scan all objects from class loader.
411
+ */
412
+ void
413
+ MM_RootScanner::scanClassloader (MM_EnvironmentBase *env, J9ClassLoader *classLoader)
414
+ {
398
415
J9MemorySegment *segment = NULL ;
399
416
J9Class *clazz = NULL ;
400
417
401
- /* Do systemClassLoader */
402
- if (NULL != static_cast <J9JavaVM*>(_omrVM->_language_vm )->systemClassLoader ) {
403
- GC_ClassLoaderSegmentIterator segmentIterator (static_cast <J9JavaVM*>(_omrVM->_language_vm )->systemClassLoader , MEMORY_TYPE_RAM_CLASS);
404
- while (NULL != (segment = segmentIterator.nextSegment ())) {
405
- if (_singleThread || J9MODRON_HANDLE_NEXT_WORK_UNIT (env)) {
418
+ if (NULL != classLoader) {
419
+ GC_ClassLoaderSegmentIterator segmentIterator (classLoader, MEMORY_TYPE_RAM_CLASS);
420
+ while (NULL != (segment = segmentIterator.nextSegment ())) {
421
+ if (_singleThread || J9MODRON_HANDLE_NEXT_WORK_UNIT (env)) {
406
422
GC_ClassHeapIterator classHeapIterator (static_cast <J9JavaVM*>(_omrVM->_language_vm ), segment);
407
- while (NULL != (clazz = classHeapIterator.nextClass ())) {
423
+ while (NULL != (clazz = classHeapIterator.nextClass ())) {
408
424
doClass (clazz);
409
425
if (shouldYieldFromClassScan (100000 )) {
410
426
yield ();
411
427
}
412
428
}
413
429
}
414
430
}
415
- }
416
431
417
- /* Do applicationClassLoader */
418
- if (NULL != static_cast <J9JavaVM*>(_omrVM->_language_vm )->applicationClassLoader ) {
419
- GC_ClassLoaderSegmentIterator segmentIterator (static_cast <J9JavaVM*>(_omrVM->_language_vm )->applicationClassLoader , MEMORY_TYPE_RAM_CLASS);
420
- while (NULL != (segment = segmentIterator.nextSegment ())) {
421
- if (_singleThread || J9MODRON_HANDLE_NEXT_WORK_UNIT (env)) {
422
- GC_ClassHeapIterator classHeapIterator (static_cast <J9JavaVM*>(_omrVM->_language_vm ), segment);
423
- while (NULL != (clazz = classHeapIterator.nextClass ())) {
424
- doClass (clazz);
425
- if (shouldYieldFromClassScan (100000 )) {
426
- yield ();
427
- }
428
- }
429
- }
432
+ if (_singleThread || J9MODRON_HANDLE_NEXT_WORK_UNIT (env)) {
433
+ scanModularityObjects (classLoader);
430
434
}
431
435
}
432
-
433
- condYield ();
434
-
435
- reportScanningEnded (RootScannerEntity_PermanentClasses);
436
436
}
437
437
#endif /* J9VM_GC_DYNAMIC_CLASS_UNLOADING */
438
438
0 commit comments