Mercurial > hg > truffle
comparison src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @ 678:4ac7d97e6101
6822263: G1: JVMTI heap iteration fails
Summary: Make object_iterate() traverse the perm gen
Reviewed-by: apetrusenko, tonyp
author | iveresov |
---|---|
date | Thu, 26 Mar 2009 08:51:32 -0700 |
parents | 96b229c54d1e |
children | 20c6f43950b5 |
comparison
equal
deleted
inserted
replaced
677:96b229c54d1e | 678:4ac7d97e6101 |
---|---|
1720 } | 1720 } |
1721 return false; | 1721 return false; |
1722 } | 1722 } |
1723 }; | 1723 }; |
1724 | 1724 |
1725 void G1CollectedHeap::oop_iterate(OopClosure* cl) { | 1725 void G1CollectedHeap::oop_iterate(OopClosure* cl, bool do_perm) { |
1726 IterateOopClosureRegionClosure blk(_g1_committed, cl); | 1726 IterateOopClosureRegionClosure blk(_g1_committed, cl); |
1727 _hrs->iterate(&blk); | 1727 _hrs->iterate(&blk); |
1728 } | 1728 if (do_perm) { |
1729 | 1729 perm_gen()->oop_iterate(cl); |
1730 void G1CollectedHeap::oop_iterate(MemRegion mr, OopClosure* cl) { | 1730 } |
1731 } | |
1732 | |
1733 void G1CollectedHeap::oop_iterate(MemRegion mr, OopClosure* cl, bool do_perm) { | |
1731 IterateOopClosureRegionClosure blk(mr, cl); | 1734 IterateOopClosureRegionClosure blk(mr, cl); |
1732 _hrs->iterate(&blk); | 1735 _hrs->iterate(&blk); |
1736 if (do_perm) { | |
1737 perm_gen()->oop_iterate(cl); | |
1738 } | |
1733 } | 1739 } |
1734 | 1740 |
1735 // Iterates an ObjectClosure over all objects within a HeapRegion. | 1741 // Iterates an ObjectClosure over all objects within a HeapRegion. |
1736 | 1742 |
1737 class IterateObjectClosureRegionClosure: public HeapRegionClosure { | 1743 class IterateObjectClosureRegionClosure: public HeapRegionClosure { |
1744 } | 1750 } |
1745 return false; | 1751 return false; |
1746 } | 1752 } |
1747 }; | 1753 }; |
1748 | 1754 |
1749 void G1CollectedHeap::object_iterate(ObjectClosure* cl) { | 1755 void G1CollectedHeap::object_iterate(ObjectClosure* cl, bool do_perm) { |
1750 IterateObjectClosureRegionClosure blk(cl); | 1756 IterateObjectClosureRegionClosure blk(cl); |
1751 _hrs->iterate(&blk); | 1757 _hrs->iterate(&blk); |
1758 if (do_perm) { | |
1759 perm_gen()->object_iterate(cl); | |
1760 } | |
1752 } | 1761 } |
1753 | 1762 |
1754 void G1CollectedHeap::object_iterate_since_last_GC(ObjectClosure* cl) { | 1763 void G1CollectedHeap::object_iterate_since_last_GC(ObjectClosure* cl) { |
1755 // FIXME: is this right? | 1764 // FIXME: is this right? |
1756 guarantee(false, "object_iterate_since_last_GC not supported by G1 heap"); | 1765 guarantee(false, "object_iterate_since_last_GC not supported by G1 heap"); |
2373 void | 2382 void |
2374 G1CollectedHeap::checkConcurrentMark() { | 2383 G1CollectedHeap::checkConcurrentMark() { |
2375 VerifyMarkedObjsClosure verifycl(this); | 2384 VerifyMarkedObjsClosure verifycl(this); |
2376 // MutexLockerEx x(getMarkBitMapLock(), | 2385 // MutexLockerEx x(getMarkBitMapLock(), |
2377 // Mutex::_no_safepoint_check_flag); | 2386 // Mutex::_no_safepoint_check_flag); |
2378 object_iterate(&verifycl); | 2387 object_iterate(&verifycl, false); |
2379 } | 2388 } |
2380 | 2389 |
2381 void G1CollectedHeap::do_sync_mark() { | 2390 void G1CollectedHeap::do_sync_mark() { |
2382 _cm->checkpointRootsInitial(); | 2391 _cm->checkpointRootsInitial(); |
2383 _cm->markFromRoots(); | 2392 _cm->markFromRoots(); |