< 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 >