Mercurial > hg > graal-jvmci-8
comparison src/share/vm/gc_implementation/g1/g1StringDedup.cpp @ 22908:c3fcc09c9239
8074037: Refactor the G1GCPhaseTime logging to make it easier to add new phases
Reviewed-by: tschatzl, mgerdin, ecaspole
author | brutisso |
---|---|
date | Thu, 26 Mar 2015 13:19:32 +0100 |
parents | 1772223a25a2 |
children |
comparison
equal
deleted
inserted
replaced
22907:93a69595b807 | 22908:c3fcc09c9239 |
---|---|
103 G1StringDedupTable::deduplicate(java_string, dummy); | 103 G1StringDedupTable::deduplicate(java_string, dummy); |
104 } | 104 } |
105 | 105 |
106 void G1StringDedup::oops_do(OopClosure* keep_alive) { | 106 void G1StringDedup::oops_do(OopClosure* keep_alive) { |
107 assert(is_enabled(), "String deduplication not enabled"); | 107 assert(is_enabled(), "String deduplication not enabled"); |
108 unlink_or_oops_do(NULL, keep_alive); | 108 unlink_or_oops_do(NULL, keep_alive, true /* allow_resize_and_rehash */); |
109 } | 109 } |
110 | 110 |
111 void G1StringDedup::unlink(BoolObjectClosure* is_alive) { | 111 void G1StringDedup::unlink(BoolObjectClosure* is_alive) { |
112 assert(is_enabled(), "String deduplication not enabled"); | 112 assert(is_enabled(), "String deduplication not enabled"); |
113 // Don't allow a potential resize or rehash during unlink, as the unlink | 113 // Don't allow a potential resize or rehash during unlink, as the unlink |
120 // and table. | 120 // and table. |
121 // | 121 // |
122 class G1StringDedupUnlinkOrOopsDoTask : public AbstractGangTask { | 122 class G1StringDedupUnlinkOrOopsDoTask : public AbstractGangTask { |
123 private: | 123 private: |
124 G1StringDedupUnlinkOrOopsDoClosure _cl; | 124 G1StringDedupUnlinkOrOopsDoClosure _cl; |
125 G1GCPhaseTimes* _phase_times; | |
125 | 126 |
126 public: | 127 public: |
127 G1StringDedupUnlinkOrOopsDoTask(BoolObjectClosure* is_alive, | 128 G1StringDedupUnlinkOrOopsDoTask(BoolObjectClosure* is_alive, |
128 OopClosure* keep_alive, | 129 OopClosure* keep_alive, |
129 bool allow_resize_and_rehash) : | 130 bool allow_resize_and_rehash, |
131 G1GCPhaseTimes* phase_times) : | |
130 AbstractGangTask("G1StringDedupUnlinkOrOopsDoTask"), | 132 AbstractGangTask("G1StringDedupUnlinkOrOopsDoTask"), |
131 _cl(is_alive, keep_alive, allow_resize_and_rehash) { | 133 _cl(is_alive, keep_alive, allow_resize_and_rehash), _phase_times(phase_times) { } |
132 } | |
133 | 134 |
134 virtual void work(uint worker_id) { | 135 virtual void work(uint worker_id) { |
135 double queue_fixup_start = os::elapsedTime(); | 136 { |
136 G1StringDedupQueue::unlink_or_oops_do(&_cl); | 137 G1GCParPhaseTimesTracker x(_phase_times, G1GCPhaseTimes::StringDedupQueueFixup, worker_id); |
137 | 138 G1StringDedupQueue::unlink_or_oops_do(&_cl); |
138 double table_fixup_start = os::elapsedTime(); | 139 } |
139 G1StringDedupTable::unlink_or_oops_do(&_cl, worker_id); | 140 { |
140 | 141 G1GCParPhaseTimesTracker x(_phase_times, G1GCPhaseTimes::StringDedupTableFixup, worker_id); |
141 double queue_fixup_time_ms = (table_fixup_start - queue_fixup_start) * 1000.0; | 142 G1StringDedupTable::unlink_or_oops_do(&_cl, worker_id); |
142 double table_fixup_time_ms = (os::elapsedTime() - table_fixup_start) * 1000.0; | 143 } |
143 G1CollectorPolicy* g1p = G1CollectedHeap::heap()->g1_policy(); | |
144 g1p->phase_times()->record_string_dedup_queue_fixup_worker_time(worker_id, queue_fixup_time_ms); | |
145 g1p->phase_times()->record_string_dedup_table_fixup_worker_time(worker_id, table_fixup_time_ms); | |
146 } | 144 } |
147 }; | 145 }; |
148 | 146 |
149 void G1StringDedup::unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* keep_alive, bool allow_resize_and_rehash) { | 147 void G1StringDedup::unlink_or_oops_do(BoolObjectClosure* is_alive, |
150 assert(is_enabled(), "String deduplication not enabled"); | 148 OopClosure* keep_alive, |
151 G1CollectorPolicy* g1p = G1CollectedHeap::heap()->g1_policy(); | 149 bool allow_resize_and_rehash, |
152 g1p->phase_times()->note_string_dedup_fixup_start(); | 150 G1GCPhaseTimes* phase_times) { |
153 double fixup_start = os::elapsedTime(); | 151 assert(is_enabled(), "String deduplication not enabled"); |
154 | 152 |
155 G1StringDedupUnlinkOrOopsDoTask task(is_alive, keep_alive, allow_resize_and_rehash); | 153 G1StringDedupUnlinkOrOopsDoTask task(is_alive, keep_alive, allow_resize_and_rehash, phase_times); |
156 if (G1CollectedHeap::use_parallel_gc_threads()) { | 154 if (G1CollectedHeap::use_parallel_gc_threads()) { |
157 G1CollectedHeap* g1h = G1CollectedHeap::heap(); | 155 G1CollectedHeap* g1h = G1CollectedHeap::heap(); |
158 g1h->set_par_threads(); | 156 g1h->set_par_threads(); |
159 g1h->workers()->run_task(&task); | 157 g1h->workers()->run_task(&task); |
160 g1h->set_par_threads(0); | 158 g1h->set_par_threads(0); |
161 } else { | 159 } else { |
162 task.work(0); | 160 task.work(0); |
163 } | 161 } |
164 | |
165 double fixup_time_ms = (os::elapsedTime() - fixup_start) * 1000.0; | |
166 g1p->phase_times()->record_string_dedup_fixup_time(fixup_time_ms); | |
167 g1p->phase_times()->note_string_dedup_fixup_end(); | |
168 } | 162 } |
169 | 163 |
170 void G1StringDedup::threads_do(ThreadClosure* tc) { | 164 void G1StringDedup::threads_do(ThreadClosure* tc) { |
171 assert(is_enabled(), "String deduplication not enabled"); | 165 assert(is_enabled(), "String deduplication not enabled"); |
172 tc->do_thread(G1StringDedupThread::thread()); | 166 tc->do_thread(G1StringDedupThread::thread()); |