708 _inc_cset_head = NULL;
709 _inc_cset_tail = NULL;
710 }
711
712 // Stop adding regions to the incremental collection set
713 void stop_incremental_cset_building() { _inc_cset_build_state = Inactive; }
714
715 // Add information about hr to the aggregated information for the
716 // incrementally built collection set.
717 void add_to_incremental_cset_info(HeapRegion* hr, size_t rs_length);
718
719 // Update information about hr in the aggregated information for
720 // the incrementally built collection set.
721 void update_incremental_cset_info(HeapRegion* hr, size_t new_rs_length);
722
723 private:
724 // Update the incremental cset information when adding a region
725 // (should not be called directly).
726 void add_region_to_incremental_cset_common(HeapRegion* hr);
727
728 public:
729 // Add hr to the LHS of the incremental collection set.
730 void add_region_to_incremental_cset_lhs(HeapRegion* hr);
731
732 // Add hr to the RHS of the incremental collection set.
733 void add_region_to_incremental_cset_rhs(HeapRegion* hr);
734
735 #ifndef PRODUCT
736 void print_collection_set(HeapRegion* list_head, outputStream* st);
737 #endif // !PRODUCT
738
739 // This sets the initiate_conc_mark_if_possible() flag to start a
740 // new cycle, as long as we are not already in one. It's best if it
741 // is called during a safepoint when the test whether a cycle is in
742 // progress or not is stable.
743 bool force_initial_mark_if_outside_cycle(GCCause::Cause gc_cause);
744
745 // This is called at the very beginning of an evacuation pause (it
746 // has to be the first thing that the pause does). If
747 // initiate_conc_mark_if_possible() is true, and the concurrent
|
708 _inc_cset_head = NULL;
709 _inc_cset_tail = NULL;
710 }
711
712 // Stop adding regions to the incremental collection set
713 void stop_incremental_cset_building() { _inc_cset_build_state = Inactive; }
714
715 // Add information about hr to the aggregated information for the
716 // incrementally built collection set.
717 void add_to_incremental_cset_info(HeapRegion* hr, size_t rs_length);
718
719 // Update information about hr in the aggregated information for
720 // the incrementally built collection set.
721 void update_incremental_cset_info(HeapRegion* hr, size_t new_rs_length);
722
723 private:
724 // Update the incremental cset information when adding a region
725 // (should not be called directly).
726 void add_region_to_incremental_cset_common(HeapRegion* hr);
727
728 // Set the state to start a concurrent marking cycle and clear
729 // _initiate_conc_mark_if_possible because it has now been
730 // acted on.
731 void initiate_conc_mark();
732
733 public:
734 // Add hr to the LHS of the incremental collection set.
735 void add_region_to_incremental_cset_lhs(HeapRegion* hr);
736
737 // Add hr to the RHS of the incremental collection set.
738 void add_region_to_incremental_cset_rhs(HeapRegion* hr);
739
740 #ifndef PRODUCT
741 void print_collection_set(HeapRegion* list_head, outputStream* st);
742 #endif // !PRODUCT
743
744 // This sets the initiate_conc_mark_if_possible() flag to start a
745 // new cycle, as long as we are not already in one. It's best if it
746 // is called during a safepoint when the test whether a cycle is in
747 // progress or not is stable.
748 bool force_initial_mark_if_outside_cycle(GCCause::Cause gc_cause);
749
750 // This is called at the very beginning of an evacuation pause (it
751 // has to be the first thing that the pause does). If
752 // initiate_conc_mark_if_possible() is true, and the concurrent
|