src/hotspot/share/jfr/leakprofiler/chains/bitset.cpp
changeset 58014 aba258cd7df8
parent 50113 caf115bb98ad
equal deleted inserted replaced
58013:d80e4bce4588 58014:aba258cd7df8
    20  * or visit www.oracle.com if you need additional information or have any
    20  * or visit www.oracle.com if you need additional information or have any
    21  * questions.
    21  * questions.
    22  *
    22  *
    23  */
    23  */
    24 #include "precompiled.hpp"
    24 #include "precompiled.hpp"
    25 #include "jfr/leakprofiler/chains/bitset.hpp"
    25 #include "jfr/leakprofiler/chains/bitset.inline.hpp"
    26 #include "jfr/recorder/storage/jfrVirtualMemory.hpp"
       
    27 #include "memory/memRegion.hpp"
       
    28 
    26 
    29 BitSet::BitSet(const MemRegion& covered_region) :
    27 BitSet::BitMapFragment::BitMapFragment(uintptr_t granule, BitMapFragment* next) :
    30   _vmm(NULL),
    28     _bits(_bitmap_granularity_size >> LogMinObjAlignmentInBytes, mtTracing, true /* clear */),
    31   _region_start(covered_region.start()),
    29     _next(next) {
    32   _region_size(covered_region.word_size()) {
    30 }
       
    31 
       
    32 BitSet::BitSet() :
       
    33     _bitmap_fragments(32),
       
    34     _fragment_list(NULL),
       
    35     _last_fragment_bits(NULL),
       
    36     _last_fragment_granule(0) {
    33 }
    37 }
    34 
    38 
    35 BitSet::~BitSet() {
    39 BitSet::~BitSet() {
    36   delete _vmm;
    40   BitMapFragment* current = _fragment_list;
       
    41   while (current != NULL) {
       
    42     BitMapFragment* next = current->next();
       
    43     delete current;
       
    44     current = next;
       
    45   }
    37 }
    46 }
    38 
       
    39 bool BitSet::initialize() {
       
    40   assert(_vmm == NULL, "invariant");
       
    41   _vmm = new JfrVirtualMemory();
       
    42   if (_vmm == NULL) {
       
    43     return false;
       
    44   }
       
    45 
       
    46   const BitMap::idx_t bits = _region_size >> LogMinObjAlignment;
       
    47   const size_t words = bits / BitsPerWord;
       
    48   const size_t raw_bytes = words * sizeof(BitMap::idx_t);
       
    49 
       
    50   // the virtual memory invocation will reserve and commit the entire space
       
    51   BitMap::bm_word_t* map = (BitMap::bm_word_t*)_vmm->initialize(raw_bytes, raw_bytes);
       
    52   if (map == NULL) {
       
    53     return false;
       
    54   }
       
    55   _bits = BitMapView(map, bits);
       
    56   return true;
       
    57 }
       
    58