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

Print this page
rev 4459 : 8005032: G1: Cleanup serial reference processing closures in concurrent marking
Summary: Reuse the parallel reference processing oop closures during serial reference processing.
Reviewed-by: brutisso
rev 4460 : 8009536: G1: Apache Lucene hang during reference processing
Summary: In CMTask::do_marking_step(), Skip offering termination and entering the first and second synchronization barriers if called from a serial context, i.e. the VM thread.
Reviewed-by: brutisso, tschatzl


1100   }
1101   // this is supposed to be called regularly during a marking step as
1102   // it checks a bunch of conditions that might cause the marking step
1103   // to abort
1104   void regular_clock_call();
1105   bool concurrent() { return _concurrent; }
1106 
1107 public:
1108   // It resets the task; it should be called right at the beginning of
1109   // a marking phase.
1110   void reset(CMBitMap* _nextMarkBitMap);
1111   // it clears all the fields that correspond to a claimed region.
1112   void clear_region_fields();
1113 
1114   void set_concurrent(bool concurrent) { _concurrent = concurrent; }
1115 
1116   // The main method of this class which performs a marking step
1117   // trying not to exceed the given duration. However, it might exit
1118   // prematurely, according to some conditions (i.e. SATB buffers are
1119   // available for processing).
1120   void do_marking_step(double target_ms, bool do_stealing, bool do_termination);


1121 
1122   // These two calls start and stop the timer
1123   void record_start_time() {
1124     _elapsed_time_ms = os::elapsedTime() * 1000.0;
1125   }
1126   void record_end_time() {
1127     _elapsed_time_ms = os::elapsedTime() * 1000.0 - _elapsed_time_ms;
1128   }
1129 
1130   // returns the task ID
1131   int task_id() { return _task_id; }
1132 
1133   // From TerminatorTerminator. It determines whether this task should
1134   // exit the termination protocol after it's entered it.
1135   virtual bool should_exit_termination();
1136 
1137   // Resets the local region fields after a task has finished scanning a
1138   // region; or when they have become stale as a result of the region
1139   // being evacuated.
1140   void giveup_current_region();




1100   }
1101   // this is supposed to be called regularly during a marking step as
1102   // it checks a bunch of conditions that might cause the marking step
1103   // to abort
1104   void regular_clock_call();
1105   bool concurrent() { return _concurrent; }
1106 
1107 public:
1108   // It resets the task; it should be called right at the beginning of
1109   // a marking phase.
1110   void reset(CMBitMap* _nextMarkBitMap);
1111   // it clears all the fields that correspond to a claimed region.
1112   void clear_region_fields();
1113 
1114   void set_concurrent(bool concurrent) { _concurrent = concurrent; }
1115 
1116   // The main method of this class which performs a marking step
1117   // trying not to exceed the given duration. However, it might exit
1118   // prematurely, according to some conditions (i.e. SATB buffers are
1119   // available for processing).
1120   void do_marking_step(double target_ms,
1121                        bool do_termination,
1122                        bool is_serial);
1123 
1124   // These two calls start and stop the timer
1125   void record_start_time() {
1126     _elapsed_time_ms = os::elapsedTime() * 1000.0;
1127   }
1128   void record_end_time() {
1129     _elapsed_time_ms = os::elapsedTime() * 1000.0 - _elapsed_time_ms;
1130   }
1131 
1132   // returns the task ID
1133   int task_id() { return _task_id; }
1134 
1135   // From TerminatorTerminator. It determines whether this task should
1136   // exit the termination protocol after it's entered it.
1137   virtual bool should_exit_termination();
1138 
1139   // Resets the local region fields after a task has finished scanning a
1140   // region; or when they have become stale as a result of the region
1141   // being evacuated.
1142   void giveup_current_region();