--- old/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp 2014-09-03 12:15:32.403797488 +0200 +++ new/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp 2014-09-03 12:15:32.087797479 +0200 @@ -5049,7 +5049,11 @@ _num_entered_barrier(0) { nmethod::increase_unloading_clock(); - _first_nmethod = CodeCache::alive_nmethod(CodeCache::first()); + // Get first alive nmethod + NMethodIterator iter = NMethodIterator(); + if(iter.next_alive()) { + _first_nmethod = iter.method(); + } _claimed_nmethod = (volatile nmethod*)_first_nmethod; } @@ -5092,27 +5096,26 @@ void claim_nmethods(nmethod** claimed_nmethods, int *num_claimed_nmethods) { nmethod* first; - nmethod* last; + NMethodIterator last; do { *num_claimed_nmethods = 0; - first = last = (nmethod*)_claimed_nmethod; + first = (nmethod*)_claimed_nmethod; + last = NMethodIterator(first); if (first != NULL) { - for (int i = 0; i < MaxClaimNmethods; i++) { - last = CodeCache::alive_nmethod(CodeCache::next(last)); - if (last == NULL) { + for (int i = 0; i < MaxClaimNmethods; i++) { + if (!last.next_alive()) { break; } - - claimed_nmethods[i] = last; + claimed_nmethods[i] = last.method(); (*num_claimed_nmethods)++; } } - } while ((nmethod*)Atomic::cmpxchg_ptr(last, &_claimed_nmethod, first) != first); + } while ((nmethod*)Atomic::cmpxchg_ptr(last.method(), &_claimed_nmethod, first) != first); } nmethod* claim_postponed_nmethod() {