@@ -335,135 +335,76 @@ void MMTkHeap::print_tracing_info() const {
335
335
}
336
336
337
337
338
- // An object is scavengable if its location may move during a scavenge.
339
- // (A scavenge is a GC which is not a full GC.)
340
- bool MMTkHeap::is_scavengable (oop obj) {return false ;}
341
338
// Registering and unregistering an nmethod (compiled code) with the heap.
342
339
// Override with specific mechanism for each specialized heap type.
343
-
344
- // Heap verification
345
- void MMTkHeap::verify (VerifyOption option) {}
346
-
347
- template <int MAX_TASKS = 12 >
348
- struct MMTkRootScanWorkScope {
349
- int * _num_root_scan_tasks;
350
- int _current_task_ordinal;
351
- MMTkRootScanWorkScope (int * num_root_scan_tasks): _num_root_scan_tasks(num_root_scan_tasks), _current_task_ordinal(0 ) {
352
- _current_task_ordinal = Atomic::add (1 , _num_root_scan_tasks);
353
- if (_current_task_ordinal == 1 ) {
354
- nmethod::oops_do_marking_prologue ();
355
- }
356
- }
357
- ~MMTkRootScanWorkScope () {
358
- if (_current_task_ordinal == MAX_TASKS) {
359
- _current_task_ordinal = 0 ;
360
- nmethod::oops_do_marking_epilogue ();
361
- }
340
+ class MMTkRegisterNMethodOopClosure : public OopClosure {
341
+ template <class T > void do_oop_work (T* p) {
342
+ mmtk_add_nmethod_oop ((void *) p);
362
343
}
344
+ public:
345
+ void do_oop (oop* p) { do_oop_work (p); }
346
+ void do_oop (narrowOop* p) { do_oop_work (p); }
363
347
};
364
348
365
- void MMTkHeap::scan_static_roots (OopClosure& cl) {
349
+
350
+ void MMTkHeap::register_nmethod (nmethod* nm) {
351
+ // Scan and report pointers in this nmethod
352
+ MMTkRegisterNMethodOopClosure reg_cl;
353
+ nm->oops_do (®_cl);
354
+ // Register the nmethod
355
+ mmtk_register_nmethod ((void *) nm);
366
356
}
367
357
358
+ void MMTkHeap::unregister_nmethod (nmethod* nm) {
359
+ mmtk_unregister_nmethod ((void *) nm);
360
+ }
361
+
362
+ // Heap verification
363
+ void MMTkHeap::verify (VerifyOption option) {}
368
364
369
365
void MMTkHeap::scan_universe_roots (OopClosure& cl) {
370
- ResourceMark rm;
371
- MMTkRootScanWorkScope<> root_scan_work (&_num_root_scan_tasks);
372
366
Universe::oops_do (&cl);
373
367
}
374
368
void MMTkHeap::scan_jni_handle_roots (OopClosure& cl) {
375
- ResourceMark rm;
376
- MMTkRootScanWorkScope<> root_scan_work (&_num_root_scan_tasks);
377
369
JNIHandles::oops_do (&cl);
378
370
}
379
371
void MMTkHeap::scan_object_synchronizer_roots (OopClosure& cl) {
380
- ResourceMark rm;
381
- MMTkRootScanWorkScope<> root_scan_work (&_num_root_scan_tasks);
382
372
ObjectSynchronizer::oops_do (&cl);
383
373
}
384
374
void MMTkHeap::scan_management_roots (OopClosure& cl) {
385
- ResourceMark rm;
386
- MMTkRootScanWorkScope<> root_scan_work (&_num_root_scan_tasks);
387
375
Management::oops_do (&cl);
388
376
}
389
377
void MMTkHeap::scan_jvmti_export_roots (OopClosure& cl) {
390
- ResourceMark rm;
391
- MMTkRootScanWorkScope<> root_scan_work (&_num_root_scan_tasks);
392
378
JvmtiExport::oops_do (&cl);
393
379
}
394
380
void MMTkHeap::scan_aot_loader_roots (OopClosure& cl) {
395
- ResourceMark rm;
396
- MMTkRootScanWorkScope<> root_scan_work (&_num_root_scan_tasks);
397
381
AOTLoader::oops_do (&cl);
398
382
}
399
383
void MMTkHeap::scan_system_dictionary_roots (OopClosure& cl) {
400
- ResourceMark rm;
401
- MMTkRootScanWorkScope<> root_scan_work (&_num_root_scan_tasks);
402
384
SystemDictionary::oops_do (&cl);
403
385
}
404
386
void MMTkHeap::scan_code_cache_roots (OopClosure& cl) {
405
- ResourceMark rm;
406
- MMTkRootScanWorkScope<> root_scan_work (&_num_root_scan_tasks);
407
- CodeBlobToOopClosure cb_cl (&cl, true );
408
- {
409
- MutexLockerEx lock (CodeCache_lock, Mutex::_no_safepoint_check_flag);
410
- CodeCache::scavenge_root_nmethods_do (&cb_cl);
411
- CodeCache::blobs_do (&cb_cl);
412
- }
387
+ MarkingCodeBlobClosure cb_cl (&cl, false );
388
+ CodeCache::blobs_do (&cb_cl);
413
389
}
414
390
void MMTkHeap::scan_string_table_roots (OopClosure& cl) {
415
- ResourceMark rm;
416
- MMTkRootScanWorkScope<> root_scan_work (&_num_root_scan_tasks);
417
391
StringTable::oops_do (&cl);
418
392
}
419
393
void MMTkHeap::scan_class_loader_data_graph_roots (OopClosure& cl) {
420
- ResourceMark rm;
421
- MMTkRootScanWorkScope<> root_scan_work (&_num_root_scan_tasks);
422
394
CLDToOopClosure cld_cl (&cl, false );
423
395
ClassLoaderDataGraph::cld_do (&cld_cl);
424
396
}
425
397
void MMTkHeap::scan_weak_processor_roots (OopClosure& cl) {
426
398
ResourceMark rm;
427
- MMTkRootScanWorkScope<> root_scan_work (&_num_root_scan_tasks);
428
399
WeakProcessor::oops_do (&cl); // (really needed???)
429
400
}
430
401
void MMTkHeap::scan_vm_thread_roots (OopClosure& cl) {
431
402
ResourceMark rm;
432
- MMTkRootScanWorkScope<> root_scan_work (&_num_root_scan_tasks);
433
403
VMThread::vm_thread ()->oops_do (&cl, NULL );
434
404
}
435
405
436
- void MMTkHeap::scan_global_roots (OopClosure& cl) {
437
- ResourceMark rm;
438
- MMTkRootScanWorkScope<> root_scan_work (&_num_root_scan_tasks);
439
-
440
- CodeBlobToOopClosure cb_cl (&cl, true );
441
- CLDToOopClosure cld_cl (&cl, false );
442
-
443
- Universe::oops_do (&cl);
444
- JNIHandles::oops_do (&cl);
445
- ObjectSynchronizer::oops_do (&cl);
446
- Management::oops_do (&cl);
447
- JvmtiExport::oops_do (&cl);
448
- AOTLoader::oops_do (&cl);
449
- SystemDictionary::oops_do (&cl);
450
- {
451
- MutexLockerEx lock (CodeCache_lock, Mutex::_no_safepoint_check_flag);
452
- CodeCache::blobs_do (&cb_cl);
453
- }
454
-
455
- OopStorage::ParState<false , false > _par_state_string (StringTable::weak_storage ());
456
- StringTable::possibly_parallel_oops_do (&_par_state_string, &cl);
457
-
458
- // if (!_root_tasks->is_task_claimed(MMTk_ClassLoaderDataGraph_oops_do)) ClassLoaderDataGraph::roots_cld_do(&cld_cl, &cld_cl);
459
- ClassLoaderDataGraph::cld_do (&cld_cl);
460
-
461
- WeakProcessor::oops_do (&cl); // (really needed???)
462
- }
463
-
464
406
void MMTkHeap::scan_thread_roots (OopClosure& cl) {
465
407
ResourceMark rm;
466
- MMTkRootScanWorkScope<> root_scan_work (&_num_root_scan_tasks);
467
408
Threads::possibly_parallel_oops_do (false , &cl, NULL );
468
409
}
469
410
0 commit comments