1083 void reached_limit();
1084 // recalculates the words scanned and refs visited limits
1085 void recalculate_limits();
1086 // decreases the words scanned and refs visited limits when we reach
1087 // an expensive operation
1088 void decrease_limits();
1089 // it checks whether the words scanned or refs visited reached their
1090 // respective limit and calls reached_limit() if they have
1091 void check_limits() {
1092 if (_words_scanned >= _words_scanned_limit ||
1093 _refs_reached >= _refs_reached_limit) {
1094 reached_limit();
1095 }
1096 }
1097 // this is supposed to be called regularly during a marking step as
1098 // it checks a bunch of conditions that might cause the marking step
1099 // to abort
1100 void regular_clock_call();
1101 bool concurrent() { return _concurrent; }
1102
1103 public:
1104 // It resets the task; it should be called right at the beginning of
1105 // a marking phase.
1106 void reset(CMBitMap* _nextMarkBitMap);
1107 // it clears all the fields that correspond to a claimed region.
1108 void clear_region_fields();
1109
1110 void set_concurrent(bool concurrent) { _concurrent = concurrent; }
1111
1112 // The main method of this class which performs a marking step
1113 // trying not to exceed the given duration. However, it might exit
1114 // prematurely, according to some conditions (i.e. SATB buffers are
1115 // available for processing).
1116 void do_marking_step(double target_ms,
1117 bool do_termination,
1118 bool is_serial);
1119
1120 // These two calls start and stop the timer
1121 void record_start_time() {
1122 _elapsed_time_ms = os::elapsedTime() * 1000.0;
|
1083 void reached_limit();
1084 // recalculates the words scanned and refs visited limits
1085 void recalculate_limits();
1086 // decreases the words scanned and refs visited limits when we reach
1087 // an expensive operation
1088 void decrease_limits();
1089 // it checks whether the words scanned or refs visited reached their
1090 // respective limit and calls reached_limit() if they have
1091 void check_limits() {
1092 if (_words_scanned >= _words_scanned_limit ||
1093 _refs_reached >= _refs_reached_limit) {
1094 reached_limit();
1095 }
1096 }
1097 // this is supposed to be called regularly during a marking step as
1098 // it checks a bunch of conditions that might cause the marking step
1099 // to abort
1100 void regular_clock_call();
1101 bool concurrent() { return _concurrent; }
1102
1103 void deal_with_reference_below_finger(
1104 oop obj, HeapWord* finger, bool is_global_finger);
1105
1106 public:
1107 // It resets the task; it should be called right at the beginning of
1108 // a marking phase.
1109 void reset(CMBitMap* _nextMarkBitMap);
1110 // it clears all the fields that correspond to a claimed region.
1111 void clear_region_fields();
1112
1113 void set_concurrent(bool concurrent) { _concurrent = concurrent; }
1114
1115 // The main method of this class which performs a marking step
1116 // trying not to exceed the given duration. However, it might exit
1117 // prematurely, according to some conditions (i.e. SATB buffers are
1118 // available for processing).
1119 void do_marking_step(double target_ms,
1120 bool do_termination,
1121 bool is_serial);
1122
1123 // These two calls start and stop the timer
1124 void record_start_time() {
1125 _elapsed_time_ms = os::elapsedTime() * 1000.0;
|