Mercurial > hg > graal-jvmci-8
changeset 22724:2d21c13d7829
Add logic to verify HeapRegionRemSet when running G1
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Thu, 05 Nov 2015 15:18:36 -0800 |
parents | 77d72f719a59 |
children | eada427470a3 |
files | src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp |
diffstat | 3 files changed, 19 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Thu Nov 05 15:17:36 2015 -0800 +++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Thu Nov 05 15:18:36 2015 -0800 @@ -6889,6 +6889,7 @@ } else { ShouldNotReachHere(); } + hr->rem_set()->verify(); return false; }
--- a/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp Thu Nov 05 15:17:36 2015 -0800 +++ b/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp Thu Nov 05 15:18:36 2015 -0800 @@ -858,6 +858,22 @@ guarantee(G1RSetSparseRegionEntries > 0 && G1RSetRegionEntries > 0 , "Sanity"); } +class VerifyNoZombies : public CodeBlobClosure { +private: + HeapRegionRemSet* _rem_set; +public: + VerifyNoZombies(HeapRegionRemSet* rem_set) : _rem_set(rem_set) {} + void do_code_blob(CodeBlob* blob) { + guarantee(blob->as_nmethod_or_null()->is_alive(), err_msg("zombie nmethod %d " INTPTR_FORMAT " " INTPTR_FORMAT " in remembered set", + blob->as_nmethod_or_null()->compile_id(), blob, _rem_set)); + } +}; + +void HeapRegionRemSet::verify() { + VerifyNoZombies blk(this); + _code_roots.nmethods_do(&blk); +} + bool HeapRegionRemSet::claim_iter() { if (_iter_state != Unclaimed) return false; jint res = Atomic::cmpxchg(Claimed, (jint*)(&_iter_state), Unclaimed);
--- a/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp Thu Nov 05 15:17:36 2015 -0800 +++ b/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp Thu Nov 05 15:18:36 2015 -0800 @@ -268,6 +268,8 @@ static uint num_par_rem_sets(); static void setup_remset_size(); + void verify(); + HeapRegion* hr() const { return _other_regions.hr(); }