< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahNumberSeq.cpp

Print this page




 115         }
 116       }
 117     }
 118   }
 119   return maximum();
 120 }
 121 
 122 BinaryMagnitudeSeq::BinaryMagnitudeSeq() {
 123   _mags = NEW_C_HEAP_ARRAY(size_t, BitsPerSize_t, mtInternal);
 124   for (int c = 0; c < BitsPerSize_t; c++) {
 125     _mags[c] = 0;
 126   }
 127   _sum = 0;
 128 }
 129 
 130 BinaryMagnitudeSeq::~BinaryMagnitudeSeq() {
 131   FREE_C_HEAP_ARRAY(size_t, _mags);
 132 }
 133 
 134 void BinaryMagnitudeSeq::add(size_t val) {
 135   Atomic::add(val, &_sum);
 136 
 137   int mag = log2_intptr(val) + 1;
 138 
 139   // Defensively saturate for product bits:
 140   if (mag < 0) {
 141     assert (false, "bucket index (%d) underflow for value (" SIZE_FORMAT ")", mag, val);
 142     mag = 0;
 143   }
 144 
 145   if (mag >= BitsPerSize_t) {
 146     assert (false, "bucket index (%d) overflow for value (" SIZE_FORMAT ")", mag, val);
 147     mag = BitsPerSize_t - 1;
 148   }
 149 
 150   Atomic::add((size_t)1, &_mags[mag]);
 151 }
 152 
 153 size_t BinaryMagnitudeSeq::level(int level) const {
 154   if (0 <= level && level < BitsPerSize_t) {
 155     return _mags[level];
 156   } else {
 157     return 0;
 158   }
 159 }
 160 
 161 size_t BinaryMagnitudeSeq::num() const {
 162   size_t r = 0;
 163   for (int c = 0; c < BitsPerSize_t; c++) {
 164     r += _mags[c];
 165   }
 166   return r;
 167 }
 168 
 169 size_t BinaryMagnitudeSeq::sum() const {
 170   return _sum;


 115         }
 116       }
 117     }
 118   }
 119   return maximum();
 120 }
 121 
 122 BinaryMagnitudeSeq::BinaryMagnitudeSeq() {
 123   _mags = NEW_C_HEAP_ARRAY(size_t, BitsPerSize_t, mtInternal);
 124   for (int c = 0; c < BitsPerSize_t; c++) {
 125     _mags[c] = 0;
 126   }
 127   _sum = 0;
 128 }
 129 
 130 BinaryMagnitudeSeq::~BinaryMagnitudeSeq() {
 131   FREE_C_HEAP_ARRAY(size_t, _mags);
 132 }
 133 
 134 void BinaryMagnitudeSeq::add(size_t val) {
 135   Atomic::add(&_sum, val);
 136 
 137   int mag = log2_intptr(val) + 1;
 138 
 139   // Defensively saturate for product bits:
 140   if (mag < 0) {
 141     assert (false, "bucket index (%d) underflow for value (" SIZE_FORMAT ")", mag, val);
 142     mag = 0;
 143   }
 144 
 145   if (mag >= BitsPerSize_t) {
 146     assert (false, "bucket index (%d) overflow for value (" SIZE_FORMAT ")", mag, val);
 147     mag = BitsPerSize_t - 1;
 148   }
 149 
 150   Atomic::add(&_mags[mag], (size_t)1);
 151 }
 152 
 153 size_t BinaryMagnitudeSeq::level(int level) const {
 154   if (0 <= level && level < BitsPerSize_t) {
 155     return _mags[level];
 156   } else {
 157     return 0;
 158   }
 159 }
 160 
 161 size_t BinaryMagnitudeSeq::num() const {
 162   size_t r = 0;
 163   for (int c = 0; c < BitsPerSize_t; c++) {
 164     r += _mags[c];
 165   }
 166   return r;
 167 }
 168 
 169 size_t BinaryMagnitudeSeq::sum() const {
 170   return _sum;
< prev index next >