src/share/vm/gc_implementation/g1/concurrentMark.hpp
Print this page
*** 807,820 ****
--- 807,829 ----
void complete_marking_in_collection_set();
// It indicates that a new collection set is being chosen.
void newCSet();
+
// It registers a collection set heap region with CM. This is used
// to determine whether any heap regions are located above the finger.
void registerCSetRegion(HeapRegion* hr);
+ // Resets the region fields of any active CMTask whose region fields
+ // are in the collection set (i.e. the region currently claimed by
+ // the CMTask will be evacuated and may be used, subsequently, as
+ // an alloc region). When this happens the region fields in the CMTask
+ // are stale and, hence, should be cleared causing the worker thread
+ // to claim a new region.
+ void reset_active_task_region_fields_in_cset();
+
// Registers the maximum region-end associated with a set of
// regions with CM. Again this is used to determine whether any
// heap regions are located above the finger.
void register_collection_set_finger(HeapWord* max_finger) {
// max_finger is the highest heap region end of the regions currently
*** 1037,1049 ****
// it updates the local fields after this task has claimed
// a new region to scan
void setup_for_region(HeapRegion* hr);
// it brings up-to-date the limit of the region
void update_region_limit();
- // it resets the local fields after a task has finished scanning a
- // region
- void giveup_current_region();
// called when either the words scanned or the refs visited limit
// has been reached
void reached_limit();
// recalculates the words scanned and refs visited limits
--- 1046,1055 ----
*** 1092,1101 ****
--- 1098,1112 ----
// From TerminatorTerminator. It determines whether this task should
// exit the termination protocol after it's entered it.
virtual bool should_exit_termination();
+ // Resets the local region fields after a task has finished scanning a
+ // region; or when they have become stale as a result of the region
+ // being evacuated.
+ void giveup_current_region();
+
HeapWord* finger() { return _finger; }
bool has_aborted() { return _has_aborted; }
void set_has_aborted() { _has_aborted = true; }
void clear_has_aborted() { _has_aborted = false; }