< prev index next >

src/hotspot/share/gc/g1/g1RootClosures.cpp

Print this page
rev 60059 : imported patch 8210462-fix-remaining-mentions-of-im

*** 45,64 **** CodeBlobClosure* strong_codeblobs() { return &_closures._codeblobs; } CodeBlobClosure* weak_codeblobs() { return &_closures._codeblobs; } }; ! // Closures used during initial mark. // The treatment of "weak" roots is selectable through the template parameter, // this is usually used to control unloading of classes and interned strings. template <G1Mark MarkWeak> ! class G1InitialMarkClosures : public G1EvacuationRootClosures { G1SharedClosures<G1MarkFromRoot> _strong; G1SharedClosures<MarkWeak> _weak; public: ! G1InitialMarkClosures(G1CollectedHeap* g1h, G1ParScanThreadState* pss) : _strong(g1h, pss, /* process_only_dirty_klasses */ false), _weak(g1h, pss, /* process_only_dirty_klasses */ false) {} OopClosure* weak_oops() { return &_weak._oops; } --- 45,64 ---- CodeBlobClosure* strong_codeblobs() { return &_closures._codeblobs; } CodeBlobClosure* weak_codeblobs() { return &_closures._codeblobs; } }; ! // Closures used during concurrent start. // The treatment of "weak" roots is selectable through the template parameter, // this is usually used to control unloading of classes and interned strings. template <G1Mark MarkWeak> ! class G1ConcurrentStartMarkClosures : public G1EvacuationRootClosures { G1SharedClosures<G1MarkFromRoot> _strong; G1SharedClosures<MarkWeak> _weak; public: ! G1ConcurrentStartMarkClosures(G1CollectedHeap* g1h, G1ParScanThreadState* pss) : _strong(g1h, pss, /* process_only_dirty_klasses */ false), _weak(g1h, pss, /* process_only_dirty_klasses */ false) {} OopClosure* weak_oops() { return &_weak._oops; }
*** 71,85 **** CodeBlobClosure* weak_codeblobs() { return &_weak._codeblobs; } }; G1EvacuationRootClosures* G1EvacuationRootClosures::create_root_closures(G1ParScanThreadState* pss, G1CollectedHeap* g1h) { G1EvacuationRootClosures* res = NULL; ! if (g1h->collector_state()->in_initial_mark_gc()) { if (ClassUnloadingWithConcurrentMark) { ! res = new G1InitialMarkClosures<G1MarkPromotedFromRoot>(g1h, pss); } else { ! res = new G1InitialMarkClosures<G1MarkFromRoot>(g1h, pss); } } else { res = new G1EvacuationClosures(g1h, pss, g1h->collector_state()->in_young_only_phase()); } return res; --- 71,85 ---- CodeBlobClosure* weak_codeblobs() { return &_weak._codeblobs; } }; G1EvacuationRootClosures* G1EvacuationRootClosures::create_root_closures(G1ParScanThreadState* pss, G1CollectedHeap* g1h) { G1EvacuationRootClosures* res = NULL; ! if (g1h->collector_state()->in_concurrent_start_gc()) { if (ClassUnloadingWithConcurrentMark) { ! res = new G1ConcurrentStartMarkClosures<G1MarkPromotedFromRoot>(g1h, pss); } else { ! res = new G1ConcurrentStartMarkClosures<G1MarkFromRoot>(g1h, pss); } } else { res = new G1EvacuationClosures(g1h, pss, g1h->collector_state()->in_young_only_phase()); } return res;
< prev index next >