< prev index next >
src/share/vm/gc/parallel/psScavenge.inline.hpp
Print this page
@@ -83,76 +83,6 @@
};
typedef PSRootsClosure</*promote_immediately=*/false> PSScavengeRootsClosure;
typedef PSRootsClosure</*promote_immediately=*/true> PSPromoteRootsClosure;
-// Scavenges a single oop in a Klass.
-class PSScavengeFromKlassClosure: public OopClosure {
- private:
- PSPromotionManager* _pm;
- // Used to redirty a scanned klass if it has oops
- // pointing to the young generation after being scanned.
- Klass* _scanned_klass;
- public:
- PSScavengeFromKlassClosure(PSPromotionManager* pm) : _pm(pm), _scanned_klass(NULL) { }
- void do_oop(narrowOop* p) { ShouldNotReachHere(); }
- void do_oop(oop* p) {
- ParallelScavengeHeap* psh = ParallelScavengeHeap::heap();
- assert(!psh->is_in_reserved(p), "GC barrier needed");
- if (PSScavenge::should_scavenge(p)) {
- assert(PSScavenge::should_scavenge(p, true), "revisiting object?");
-
- oop o = *p;
- oop new_obj;
- if (o->is_forwarded()) {
- new_obj = o->forwardee();
- } else {
- new_obj = _pm->copy_to_survivor_space</*promote_immediately=*/false>(o);
- }
- oopDesc::encode_store_heap_oop_not_null(p, new_obj);
-
- if (PSScavenge::is_obj_in_young(new_obj)) {
- do_klass_barrier();
- }
- }
- }
-
- void set_scanned_klass(Klass* klass) {
- assert(_scanned_klass == NULL || klass == NULL, "Should always only handling one klass at a time");
- _scanned_klass = klass;
- }
-
- private:
- void do_klass_barrier() {
- assert(_scanned_klass != NULL, "Should not be called without having a scanned klass");
- _scanned_klass->record_modified_oops();
- }
-
-};
-
-// Scavenges the oop in a Klass.
-class PSScavengeKlassClosure: public KlassClosure {
- private:
- PSScavengeFromKlassClosure _oop_closure;
- protected:
- public:
- PSScavengeKlassClosure(PSPromotionManager* pm) : _oop_closure(pm) { }
- void do_klass(Klass* klass) {
- // If the klass has not been dirtied we know that there's
- // no references into the young gen and we can skip it.
-
- if (klass->has_modified_oops()) {
- // Clean the klass since we're going to scavenge all the metadata.
- klass->clear_modified_oops();
-
- // Setup the promotion manager to redirty this klass
- // if references are left in the young gen.
- _oop_closure.set_scanned_klass(klass);
-
- klass->oops_do(&_oop_closure);
-
- _oop_closure.set_scanned_klass(NULL);
- }
- }
-};
-
#endif // SHARE_VM_GC_PARALLEL_PSSCAVENGE_INLINE_HPP
< prev index next >