Mercurial > hg > truffle
comparison src/share/vm/gc_implementation/g1/concurrentG1RefineThread.hpp @ 794:315a5d70b295
6484957: G1: parallel concurrent refinement
6826318: G1: remove traversal-based refinement code
Summary: Removed traversal-based refinement code as it's no longer used. Made the concurrent refinement (queue-based) parallel.
Reviewed-by: tonyp
author | iveresov |
---|---|
date | Mon, 11 May 2009 16:30:56 -0700 |
parents | 37f87013dfd8 |
children | 215f81b4d9b3 |
comparison
equal
deleted
inserted
replaced
758:9b3a41ccc927 | 794:315a5d70b295 |
---|---|
31 friend class VMStructs; | 31 friend class VMStructs; |
32 friend class G1CollectedHeap; | 32 friend class G1CollectedHeap; |
33 | 33 |
34 double _vtime_start; // Initial virtual time. | 34 double _vtime_start; // Initial virtual time. |
35 double _vtime_accum; // Initial virtual time. | 35 double _vtime_accum; // Initial virtual time. |
36 int _worker_id; | |
36 | 37 |
38 // The refinement threads collection is linked list. A predecessor can activate a successor | |
39 // when the number of the rset update buffer crosses a certain threshold. A successor | |
40 // would self-deactivate when the number of the buffers falls below the threshold. | |
41 bool _active; | |
42 ConcurrentG1RefineThread * _next; | |
37 public: | 43 public: |
38 virtual void run(); | 44 virtual void run(); |
39 | 45 |
46 bool is_active() { return _active; } | |
47 void activate() { _active = true; } | |
48 void deactivate() { _active = false; } | |
49 | |
40 private: | 50 private: |
41 ConcurrentG1Refine* _cg1r; | 51 ConcurrentG1Refine* _cg1r; |
42 bool _started; | |
43 bool _in_progress; | |
44 volatile bool _restart; | |
45 | 52 |
46 COTracker _co_tracker; | 53 COTracker _co_tracker; |
47 double _interval_ms; | 54 double _interval_ms; |
48 | |
49 bool _do_traversal; | |
50 | 55 |
51 void decreaseInterval(int processing_time_ms) { | 56 void decreaseInterval(int processing_time_ms) { |
52 double min_interval_ms = (double) processing_time_ms; | 57 double min_interval_ms = (double) processing_time_ms; |
53 _interval_ms = 0.8 * _interval_ms; | 58 _interval_ms = 0.8 * _interval_ms; |
54 if (_interval_ms < min_interval_ms) | 59 if (_interval_ms < min_interval_ms) |
61 _interval_ms = max_interval_ms; | 66 _interval_ms = max_interval_ms; |
62 } | 67 } |
63 | 68 |
64 void sleepBeforeNextCycle(); | 69 void sleepBeforeNextCycle(); |
65 | 70 |
66 void traversalBasedRefinement(); | |
67 | |
68 void queueBasedRefinement(); | |
69 | |
70 // For use by G1CollectedHeap, which is a friend. | 71 // For use by G1CollectedHeap, which is a friend. |
71 static SuspendibleThreadSet* sts() { return &_sts; } | 72 static SuspendibleThreadSet* sts() { return &_sts; } |
72 | 73 |
73 public: | 74 public: |
74 // Constructor | 75 // Constructor |
75 ConcurrentG1RefineThread(ConcurrentG1Refine* cg1r); | 76 ConcurrentG1RefineThread(ConcurrentG1Refine* cg1r, ConcurrentG1RefineThread* next, int worker_id); |
76 | 77 |
77 // Printing | 78 // Printing |
78 void print(); | 79 void print(); |
79 | 80 |
80 // Total virtual time so far. | 81 // Total virtual time so far. |
81 double vtime_accum() { return _vtime_accum; } | 82 double vtime_accum() { return _vtime_accum; } |
82 | 83 |
83 ConcurrentG1Refine* cg1r() { return _cg1r; } | 84 ConcurrentG1Refine* cg1r() { return _cg1r; } |
84 | 85 |
85 | |
86 void set_started() { _started = true; } | |
87 void clear_started() { _started = false; } | |
88 bool started() { return _started; } | |
89 | |
90 void set_in_progress() { _in_progress = true; } | |
91 void clear_in_progress() { _in_progress = false; } | |
92 bool in_progress() { return _in_progress; } | |
93 | |
94 void set_do_traversal(bool b); | |
95 bool do_traversal() { return _do_traversal; } | |
96 | |
97 void sample_young_list_rs_lengths(); | 86 void sample_young_list_rs_lengths(); |
98 | 87 |
99 // Yield for GC | 88 // Yield for GC |
100 void yield(); | 89 void yield(); |
101 | 90 |
102 // shutdown | 91 // shutdown |
103 static void stop(); | 92 void stop(); |
104 }; | 93 }; |