< prev index next >

src/share/vm/gc/g1/g1ConcurrentMark.hpp

Print this page

        

*** 350,361 **** // point when all the tasks complete their work. It is really used // to determine the points between the end of concurrent marking and // time of remark. volatile bool _concurrent_marking_in_progress; ! // Keep track of whether we have started concurrent phase or not. ! bool _concurrent_phase_started; // All of these times are in ms NumberSeq _init_times; NumberSeq _remark_times; NumberSeq _remark_mark_times; --- 350,370 ---- // point when all the tasks complete their work. It is really used // to determine the points between the end of concurrent marking and // time of remark. volatile bool _concurrent_marking_in_progress; ! // There would be a race between ConcurrentMarkThread and VMThread(ConcurrentMark::abort()) ! // to call ConcurrentGCTimer::register_gc_concurrent_end(). ! // And this variable is used to keep track of concurrent phase. ! volatile uint _concurrent_phase_status; ! // Concurrent phase is not yet started. ! static const uint ConcPhaseNotStarted = 0; ! // Concurrent phase is started. ! static const uint ConcPhaseStarted = 1; ! // Caller thread of ConcurrentGCTimer::register_gc_concurrent_end() is ending concurrent phase. ! // So other thread should wait until the status to be changed to ConcPhaseNotStarted. ! static const uint ConcPhaseStopping = 2; // All of these times are in ms NumberSeq _init_times; NumberSeq _remark_times; NumberSeq _remark_mark_times;
*** 483,492 **** --- 492,504 ---- intptr_t _heap_bottom_card_num; // Set to true when initialization is complete bool _completed_initialization; + // end_timer, true to end gc timer after ending concurrent phase. + void register_concurrent_phase_end_common(bool end_timer); + public: // Manipulation of the global mark stack. // The push and pop operations are used by tasks for transfers // between task-local queues and the global mark stack, and use // locking for concurrency safety.
*** 518,527 **** --- 530,541 ---- _concurrent_marking_in_progress = false; } void register_concurrent_phase_start(const char* title); void register_concurrent_phase_end(); + // Ends both concurrent phase and timer. + void register_concurrent_gc_end(); void update_accum_task_vtime(int i, double vtime) { _accum_task_vtime[i] += vtime; }
< prev index next >