--- old/src/hotspot/share/gc/g1/g1CollectedHeap.cpp Tue Nov 14 13:26:52 2017 +++ new/src/hotspot/share/gc/g1/g1CollectedHeap.cpp Tue Nov 14 13:26:51 2017 @@ -81,6 +81,7 @@ #include "runtime/atomic.hpp" #include "runtime/init.hpp" #include "runtime/orderAccess.inline.hpp" +#include "runtime/threadSMR.hpp" #include "runtime/vmThread.hpp" #include "utilities/align.hpp" #include "utilities/globalDefinitions.hpp" @@ -2649,11 +2650,9 @@ size_t G1CollectedHeap::pending_card_num() { size_t extra_cards = 0; - JavaThread *curr = Threads::first(); - while (curr != NULL) { + for (JavaThreadIteratorWithHandle jtiwh; JavaThread *curr = jtiwh.next(); ) { DirtyCardQueue& dcq = curr->dirty_card_queue(); extra_cards += dcq.size(); - curr = curr->next(); } DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set(); size_t buffer_size = dcqs.buffer_size();