comparison src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp @ 7633:7df93f7c14a5

8006242: G1: WorkerDataArray<T>::verify() too strict for double calculations Summary: Also reviewed by vitalyd@gmail.com. Reviewed-by: johnc, mgerdin
author brutisso
date Wed, 16 Jan 2013 12:46:27 +0100
parents 5baec2e69518
children 194f52aa2f23
comparison
equal deleted inserted replaced
7619:46e60405583b 7633:7df93f7c14a5
129 buf.append_and_print_cr("]"); 129 buf.append_and_print_cr("]");
130 } 130 }
131 131
132 #ifndef PRODUCT 132 #ifndef PRODUCT
133 133
134 template <> const int WorkerDataArray<int>::_uninitialized = -1;
135 template <> const double WorkerDataArray<double>::_uninitialized = -1.0;
136 template <> const size_t WorkerDataArray<size_t>::_uninitialized = (size_t)-1;
137
134 template <class T> 138 template <class T>
135 void WorkerDataArray<T>::reset() { 139 void WorkerDataArray<T>::reset() {
136 for (uint i = 0; i < _length; i++) { 140 for (uint i = 0; i < _length; i++) {
137 _data[i] = (T)-1; 141 _data[i] = (T)_uninitialized;
138 } 142 }
139 } 143 }
140 144
141 template <class T> 145 template <class T>
142 void WorkerDataArray<T>::verify() { 146 void WorkerDataArray<T>::verify() {
143 for (uint i = 0; i < _length; i++) { 147 for (uint i = 0; i < _length; i++) {
144 assert(_data[i] >= (T)0, err_msg("Invalid data for worker %d", i)); 148 assert(_data[i] != _uninitialized,
149 err_msg("Invalid data for worker " UINT32_FORMAT ", data: %lf, uninitialized: %lf",
150 i, (double)_data[i], (double)_uninitialized));
145 } 151 }
146 } 152 }
147 153
148 #endif 154 #endif
149 155
199 _last_obj_copy_times_ms.verify(); 205 _last_obj_copy_times_ms.verify();
200 _last_termination_times_ms.verify(); 206 _last_termination_times_ms.verify();
201 _last_termination_attempts.verify(); 207 _last_termination_attempts.verify();
202 _last_gc_worker_end_times_ms.verify(); 208 _last_gc_worker_end_times_ms.verify();
203 209
204 for (uint i = 0; i < _active_gc_threads; i++) { 210 for (uint i = 0; i < _active_gc_threads; i++) {
205 double worker_time = _last_gc_worker_end_times_ms.get(i) - _last_gc_worker_start_times_ms.get(i); 211 double worker_time = _last_gc_worker_end_times_ms.get(i) - _last_gc_worker_start_times_ms.get(i);
206 _last_gc_worker_times_ms.set(i, worker_time); 212 _last_gc_worker_times_ms.set(i, worker_time);
207 213
208 double worker_known_time = _last_ext_root_scan_times_ms.get(i) + 214 double worker_known_time = _last_ext_root_scan_times_ms.get(i) +
209 _last_satb_filtering_times_ms.get(i) + 215 _last_satb_filtering_times_ms.get(i) +
210 _last_update_rs_times_ms.get(i) + 216 _last_update_rs_times_ms.get(i) +
211 _last_scan_rs_times_ms.get(i) + 217 _last_scan_rs_times_ms.get(i) +
212 _last_obj_copy_times_ms.get(i) + 218 _last_obj_copy_times_ms.get(i) +
213 _last_termination_times_ms.get(i); 219 _last_termination_times_ms.get(i);
214 220
215 double worker_other_time = worker_time - worker_known_time; 221 double worker_other_time = worker_time - worker_known_time;
216 _last_gc_worker_other_times_ms.set(i, worker_other_time); 222 _last_gc_worker_other_times_ms.set(i, worker_other_time);
217 } 223 }
218 224
219 _last_gc_worker_times_ms.verify(); 225 _last_gc_worker_times_ms.verify();
220 _last_gc_worker_other_times_ms.verify(); 226 _last_gc_worker_other_times_ms.verify();
221 } 227 }
222 228