2515 // small spikes, so some kind of historical smoothing based on |
2515 // small spikes, so some kind of historical smoothing based on |
2516 // previous experience with the greater reactivity might be useful. |
2516 // previous experience with the greater reactivity might be useful. |
2517 // Lacking sufficient experience, CMSOldPLABResizeQuicker is disabled by |
2517 // Lacking sufficient experience, CMSOldPLABResizeQuicker is disabled by |
2518 // default. |
2518 // default. |
2519 if (ResizeOldPLAB && CMSOldPLABResizeQuicker) { |
2519 if (ResizeOldPLAB && CMSOldPLABResizeQuicker) { |
2520 size_t multiple = _num_blocks[word_sz]/(CMSOldPLABToleranceFactor*CMSOldPLABNumRefills*n_blks); |
2520 // |
|
2521 // On a 32-bit VM, the denominator can become zero because of integer overflow, |
|
2522 // which is why there is a cast to double. |
|
2523 // |
|
2524 size_t multiple = (size_t) (_num_blocks[word_sz]/(((double)CMSOldPLABToleranceFactor)*CMSOldPLABNumRefills*n_blks)); |
2521 n_blks += CMSOldPLABReactivityFactor*multiple*n_blks; |
2525 n_blks += CMSOldPLABReactivityFactor*multiple*n_blks; |
2522 n_blks = MIN2(n_blks, CMSOldPLABMax); |
2526 n_blks = MIN2(n_blks, CMSOldPLABMax); |
2523 } |
2527 } |
2524 assert(n_blks > 0, "Error"); |
2528 assert(n_blks > 0, "Error"); |
2525 _cfls->par_get_chunk_of_blocks(word_sz, n_blks, fl); |
2529 _cfls->par_get_chunk_of_blocks(word_sz, n_blks, fl); |