279 // Survivor Space rescan.
280 class ChunkArray: public CHeapObj<mtGC> {
281 size_t _index;
282 size_t _capacity;
283 size_t _overflows;
284 HeapWord** _array; // storage for array
285
286 public:
287 ChunkArray() : _index(0), _capacity(0), _overflows(0), _array(NULL) {}
288 ChunkArray(HeapWord** a, size_t c):
289 _index(0), _capacity(c), _overflows(0), _array(a) {}
290
291 HeapWord** array() { return _array; }
292 void set_array(HeapWord** a) { _array = a; }
293
294 size_t capacity() { return _capacity; }
295 void set_capacity(size_t c) { _capacity = c; }
296
297 size_t end() {
298 assert(_index <= capacity(),
299 err_msg("_index (" SIZE_FORMAT ") > _capacity (" SIZE_FORMAT "): out of bounds",
300 _index, _capacity));
301 return _index;
302 } // exclusive
303
304 HeapWord* nth(size_t n) {
305 assert(n < end(), "Out of bounds access");
306 return _array[n];
307 }
308
309 void reset() {
310 _index = 0;
311 if (_overflows > 0 && PrintCMSStatistics > 1) {
312 warning("CMS: ChunkArray[" SIZE_FORMAT "] overflowed " SIZE_FORMAT " times",
313 _capacity, _overflows);
314 }
315 _overflows = 0;
316 }
317
318 void record_sample(HeapWord* p, size_t sz) {
319 // For now we do not do anything with the size
320 if (_index < _capacity) {
321 _array[_index++] = p;
322 } else {
323 ++_overflows;
324 assert(_index == _capacity,
325 err_msg("_index (" SIZE_FORMAT ") > _capacity (" SIZE_FORMAT
326 "): out of bounds at overflow#" SIZE_FORMAT,
327 _index, _capacity, _overflows));
328 }
329 }
330 };
331
332 //
333 // Timing, allocation and promotion statistics for gc scheduling and incremental
334 // mode pacing. Most statistics are exponential averages.
335 //
336 class CMSStats VALUE_OBJ_CLASS_SPEC {
337 private:
338 ConcurrentMarkSweepGeneration* const _cms_gen; // The cms (old) gen.
339
340 // The following are exponential averages with factor alpha:
341 // avg = (100 - alpha) * avg + alpha * cur_sample
342 //
343 // The durations measure: end_time[n] - start_time[n]
344 // The periods measure: start_time[n] - start_time[n-1]
345 //
346 // The cms period and duration include only concurrent collections; time spent
347 // in foreground cms collections due to System.gc() or because of a failure to
|
279 // Survivor Space rescan.
280 class ChunkArray: public CHeapObj<mtGC> {
281 size_t _index;
282 size_t _capacity;
283 size_t _overflows;
284 HeapWord** _array; // storage for array
285
286 public:
287 ChunkArray() : _index(0), _capacity(0), _overflows(0), _array(NULL) {}
288 ChunkArray(HeapWord** a, size_t c):
289 _index(0), _capacity(c), _overflows(0), _array(a) {}
290
291 HeapWord** array() { return _array; }
292 void set_array(HeapWord** a) { _array = a; }
293
294 size_t capacity() { return _capacity; }
295 void set_capacity(size_t c) { _capacity = c; }
296
297 size_t end() {
298 assert(_index <= capacity(),
299 "_index (" SIZE_FORMAT ") > _capacity (" SIZE_FORMAT "): out of bounds",
300 _index, _capacity);
301 return _index;
302 } // exclusive
303
304 HeapWord* nth(size_t n) {
305 assert(n < end(), "Out of bounds access");
306 return _array[n];
307 }
308
309 void reset() {
310 _index = 0;
311 if (_overflows > 0 && PrintCMSStatistics > 1) {
312 warning("CMS: ChunkArray[" SIZE_FORMAT "] overflowed " SIZE_FORMAT " times",
313 _capacity, _overflows);
314 }
315 _overflows = 0;
316 }
317
318 void record_sample(HeapWord* p, size_t sz) {
319 // For now we do not do anything with the size
320 if (_index < _capacity) {
321 _array[_index++] = p;
322 } else {
323 ++_overflows;
324 assert(_index == _capacity,
325 "_index (" SIZE_FORMAT ") > _capacity (" SIZE_FORMAT
326 "): out of bounds at overflow#" SIZE_FORMAT,
327 _index, _capacity, _overflows);
328 }
329 }
330 };
331
332 //
333 // Timing, allocation and promotion statistics for gc scheduling and incremental
334 // mode pacing. Most statistics are exponential averages.
335 //
336 class CMSStats VALUE_OBJ_CLASS_SPEC {
337 private:
338 ConcurrentMarkSweepGeneration* const _cms_gen; // The cms (old) gen.
339
340 // The following are exponential averages with factor alpha:
341 // avg = (100 - alpha) * avg + alpha * cur_sample
342 //
343 // The durations measure: end_time[n] - start_time[n]
344 // The periods measure: start_time[n] - start_time[n-1]
345 //
346 // The cms period and duration include only concurrent collections; time spent
347 // in foreground cms collections due to System.gc() or because of a failure to
|