21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_GC_G1_CONCURRENTMARKTHREAD_HPP
26 #define SHARE_VM_GC_G1_CONCURRENTMARKTHREAD_HPP
27
28 #include "gc/shared/concurrentGCThread.hpp"
29
30 // The Concurrent Mark GC Thread triggers the parallel G1CMConcurrentMarkingTasks
31 // as well as handling various marking cleanup.
32
33 class G1ConcurrentMark;
34 class G1CollectorPolicy;
35
36 class ConcurrentMarkThread: public ConcurrentGCThread {
37 friend class VMStructs;
38
39 double _vtime_start; // Initial virtual time.
40 double _vtime_accum; // Accumulated virtual time.
41
42 double _vtime_mark_accum;
43
44 public:
45 virtual void run();
46
47 private:
48 G1ConcurrentMark* _cm;
49
50 enum State {
51 Idle,
52 Started,
53 InProgress
54 };
55
56 volatile State _state;
57
58 void sleepBeforeNextCycle();
59 void delay_to_keep_mmu(G1CollectorPolicy* g1_policy, bool remark);
60
61 void run_service();
62 void stop_service();
63
64 static SurrogateLockerThread* _slt;
65
66 public:
67 // Constructor
76 double vtime_mark_accum();
77
78 G1ConcurrentMark* cm() { return _cm; }
79
80 void set_idle() { assert(_state != Started, "must not be starting a new cycle"); _state = Idle; }
81 bool idle() { return _state == Idle; }
82 void set_started() { assert(_state == Idle, "cycle in progress"); _state = Started; }
83 bool started() { return _state == Started; }
84 void set_in_progress() { assert(_state == Started, "must be starting a cycle"); _state = InProgress; }
85 bool in_progress() { return _state == InProgress; }
86
87 // Returns true from the moment a marking cycle is
88 // initiated (during the initial-mark pause when started() is set)
89 // to the moment when the cycle completes (just after the next
90 // marking bitmap has been cleared and in_progress() is
91 // cleared). While during_cycle() is true we will not start another cycle
92 // so that cycles do not overlap. We cannot use just in_progress()
93 // as the CM thread might take some time to wake up before noticing
94 // that started() is set and set in_progress().
95 bool during_cycle() { return !idle(); }
96
97 // shutdown
98 void stop();
99 };
100
101 #endif // SHARE_VM_GC_G1_CONCURRENTMARKTHREAD_HPP
|
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_GC_G1_CONCURRENTMARKTHREAD_HPP
26 #define SHARE_VM_GC_G1_CONCURRENTMARKTHREAD_HPP
27
28 #include "gc/shared/concurrentGCThread.hpp"
29
30 // The Concurrent Mark GC Thread triggers the parallel G1CMConcurrentMarkingTasks
31 // as well as handling various marking cleanup.
32
33 class G1ConcurrentMark;
34 class G1CollectorPolicy;
35
36 class ConcurrentMarkThread: public ConcurrentGCThread {
37 friend class VMStructs;
38
39 double _vtime_start; // Initial virtual time.
40 double _vtime_accum; // Accumulated virtual time.
41 double _vtime_mark_accum;
42
43 G1ConcurrentMark* _cm;
44
45 enum State {
46 Idle,
47 Started,
48 InProgress
49 };
50
51 volatile State _state;
52
53 void sleepBeforeNextCycle();
54 void delay_to_keep_mmu(G1CollectorPolicy* g1_policy, bool remark);
55
56 void run_service();
57 void stop_service();
58
59 static SurrogateLockerThread* _slt;
60
61 public:
62 // Constructor
71 double vtime_mark_accum();
72
73 G1ConcurrentMark* cm() { return _cm; }
74
75 void set_idle() { assert(_state != Started, "must not be starting a new cycle"); _state = Idle; }
76 bool idle() { return _state == Idle; }
77 void set_started() { assert(_state == Idle, "cycle in progress"); _state = Started; }
78 bool started() { return _state == Started; }
79 void set_in_progress() { assert(_state == Started, "must be starting a cycle"); _state = InProgress; }
80 bool in_progress() { return _state == InProgress; }
81
82 // Returns true from the moment a marking cycle is
83 // initiated (during the initial-mark pause when started() is set)
84 // to the moment when the cycle completes (just after the next
85 // marking bitmap has been cleared and in_progress() is
86 // cleared). While during_cycle() is true we will not start another cycle
87 // so that cycles do not overlap. We cannot use just in_progress()
88 // as the CM thread might take some time to wake up before noticing
89 // that started() is set and set in_progress().
90 bool during_cycle() { return !idle(); }
91 };
92
93 #endif // SHARE_VM_GC_G1_CONCURRENTMARKTHREAD_HPP
|