提交 e5a63d8b 编写于 作者: I iveresov

6822263: G1: JVMTI heap iteration fails

Summary: Make object_iterate() traverse the perm gen
Reviewed-by: apetrusenko, tonyp
上级 0c235037
...@@ -1722,14 +1722,20 @@ public: ...@@ -1722,14 +1722,20 @@ public:
} }
}; };
void G1CollectedHeap::oop_iterate(OopClosure* cl) { void G1CollectedHeap::oop_iterate(OopClosure* cl, bool do_perm) {
IterateOopClosureRegionClosure blk(_g1_committed, cl); IterateOopClosureRegionClosure blk(_g1_committed, cl);
_hrs->iterate(&blk); _hrs->iterate(&blk);
if (do_perm) {
perm_gen()->oop_iterate(cl);
}
} }
void G1CollectedHeap::oop_iterate(MemRegion mr, OopClosure* cl) { void G1CollectedHeap::oop_iterate(MemRegion mr, OopClosure* cl, bool do_perm) {
IterateOopClosureRegionClosure blk(mr, cl); IterateOopClosureRegionClosure blk(mr, cl);
_hrs->iterate(&blk); _hrs->iterate(&blk);
if (do_perm) {
perm_gen()->oop_iterate(cl);
}
} }
// Iterates an ObjectClosure over all objects within a HeapRegion. // Iterates an ObjectClosure over all objects within a HeapRegion.
...@@ -1746,9 +1752,12 @@ public: ...@@ -1746,9 +1752,12 @@ public:
} }
}; };
void G1CollectedHeap::object_iterate(ObjectClosure* cl) { void G1CollectedHeap::object_iterate(ObjectClosure* cl, bool do_perm) {
IterateObjectClosureRegionClosure blk(cl); IterateObjectClosureRegionClosure blk(cl);
_hrs->iterate(&blk); _hrs->iterate(&blk);
if (do_perm) {
perm_gen()->object_iterate(cl);
}
} }
void G1CollectedHeap::object_iterate_since_last_GC(ObjectClosure* cl) { void G1CollectedHeap::object_iterate_since_last_GC(ObjectClosure* cl) {
...@@ -2375,7 +2384,7 @@ G1CollectedHeap::checkConcurrentMark() { ...@@ -2375,7 +2384,7 @@ G1CollectedHeap::checkConcurrentMark() {
VerifyMarkedObjsClosure verifycl(this); VerifyMarkedObjsClosure verifycl(this);
// MutexLockerEx x(getMarkBitMapLock(), // MutexLockerEx x(getMarkBitMapLock(),
// Mutex::_no_safepoint_check_flag); // Mutex::_no_safepoint_check_flag);
object_iterate(&verifycl); object_iterate(&verifycl, false);
} }
void G1CollectedHeap::do_sync_mark() { void G1CollectedHeap::do_sync_mark() {
......
...@@ -865,14 +865,25 @@ public: ...@@ -865,14 +865,25 @@ public:
// Iterate over all the ref-containing fields of all objects, calling // Iterate over all the ref-containing fields of all objects, calling
// "cl.do_oop" on each. // "cl.do_oop" on each.
virtual void oop_iterate(OopClosure* cl); virtual void oop_iterate(OopClosure* cl) {
oop_iterate(cl, true);
}
void oop_iterate(OopClosure* cl, bool do_perm);
// Same as above, restricted to a memory region. // Same as above, restricted to a memory region.
virtual void oop_iterate(MemRegion mr, OopClosure* cl); virtual void oop_iterate(MemRegion mr, OopClosure* cl) {
oop_iterate(mr, cl, true);
}
void oop_iterate(MemRegion mr, OopClosure* cl, bool do_perm);
// Iterate over all objects, calling "cl.do_object" on each. // Iterate over all objects, calling "cl.do_object" on each.
virtual void object_iterate(ObjectClosure* cl); virtual void object_iterate(ObjectClosure* cl) {
virtual void safe_object_iterate(ObjectClosure* cl) { object_iterate(cl); } object_iterate(cl, true);
}
virtual void safe_object_iterate(ObjectClosure* cl) {
object_iterate(cl, true);
}
void object_iterate(ObjectClosure* cl, bool do_perm);
// Iterate over all objects allocated since the last collection, calling // Iterate over all objects allocated since the last collection, calling
// "cl.do_object" on each. The heap must have been initialized properly // "cl.do_object" on each. The heap must have been initialized properly
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册