src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp	Fri Aug 29 15:59:14 2014
--- new/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp	Fri Aug 29 15:59:14 2014

*** 5047,5057 **** --- 5047,5061 ---- _claimed_nmethod(NULL), _postponed_list(NULL), _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; } ~G1CodeCacheUnloadingTask() { CodeCache::verify_clean_inline_caches();
*** 5090,5120 **** --- 5094,5123 ---- static const int MaxClaimNmethods = 16; 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; + 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.method(), &_claimed_nmethod, first) != first); } nmethod* claim_postponed_nmethod() { nmethod* claim; nmethod* next;

src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File