src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp

Print this page

        

*** 426,494 **** static void test(); #endif }; class HeapRegionRemSetIterator : public StackObj { ! ! // The region RSet over which we're iterating. HeapRegionRemSet* _hrrs; // Local caching of HRRS fields. const BitMap* _coarse_map; - PerRegionTable** _fine_grain_regions; G1BlockOffsetSharedArray* _bosa; G1CollectedHeap* _g1h; ! // The number yielded since initialization. size_t _n_yielded_fine; size_t _n_yielded_coarse; size_t _n_yielded_sparse; ! // Indicates what granularity of table that we're currently iterating over. // We start iterating over the sparse table, progress to the fine grain // table, and then finish with the coarse table. - // See HeapRegionRemSetIterator::has_next(). enum IterState { Sparse, Fine, Coarse }; IterState _is; ! // In both kinds of iteration, heap offset of first card of current ! // region. size_t _cur_region_card_offset; - // Card offset within cur region. - size_t _cur_region_cur_card; - - // Coarse table iteration fields: ! // Current region index; int _coarse_cur_region_index; size_t _coarse_cur_region_cur_card; bool coarse_has_next(size_t& card_index); ! // Fine table iteration fields: ! ! // Index of bucket-list we're working on. ! int _fine_array_index; ! ! // Per Region Table we're doing within current bucket list. PerRegionTable* _fine_cur_prt; ! /* SparsePRT::*/ SparsePRTIter _sparse_iter; ! ! void fine_find_next_non_null_prt(); ! bool fine_has_next(); bool fine_has_next(size_t& card_index); ! public: ! // We require an iterator to be initialized before use, so the ! // constructor does little. HeapRegionRemSetIterator(HeapRegionRemSet* hrrs); // If there remains one or more cards to be yielded, returns true and // sets "card_index" to one of those cards (which is then considered // yielded.) Otherwise, returns false (and leaves "card_index" --- 426,484 ---- static void test(); #endif }; class HeapRegionRemSetIterator : public StackObj { ! private: ! // The region RSet over which we are iterating. HeapRegionRemSet* _hrrs; // Local caching of HRRS fields. const BitMap* _coarse_map; G1BlockOffsetSharedArray* _bosa; G1CollectedHeap* _g1h; ! // The number of cards yielded since initialization. size_t _n_yielded_fine; size_t _n_yielded_coarse; size_t _n_yielded_sparse; ! // Indicates what granularity of table that we are currently iterating over. // We start iterating over the sparse table, progress to the fine grain // table, and then finish with the coarse table. enum IterState { Sparse, Fine, Coarse }; IterState _is; ! // For both Coarse and Fine remembered set iteration this contains the ! // first card number of the heap region we currently iterate over. size_t _cur_region_card_offset; ! // Current region index for the Coarse remembered set iteration. int _coarse_cur_region_index; size_t _coarse_cur_region_cur_card; bool coarse_has_next(size_t& card_index); ! // The PRT we are currently iterating over. PerRegionTable* _fine_cur_prt; + // Card offset within the current PRT. + size_t _cur_card_in_prt; ! // Update internal variables when switching to the given PRT. ! void switch_to_prt(PerRegionTable* prt); bool fine_has_next(); bool fine_has_next(size_t& card_index); ! // The Sparse remembered set iterator. ! SparsePRTIter _sparse_iter; ! ! public: HeapRegionRemSetIterator(HeapRegionRemSet* hrrs); // If there remains one or more cards to be yielded, returns true and // sets "card_index" to one of those cards (which is then considered // yielded.) Otherwise, returns false (and leaves "card_index"