29
29
30
30
#include " memory/memRegion.hpp"
31
31
#include " utilities/bitMap.inline.hpp"
32
- #include " utilities/hashtable.inline.hpp"
33
32
34
33
template <MEMFLAGS F>
35
34
ObjectBitSet<F>::BitMapFragment::BitMapFragment(uintptr_t granule, BitMapFragment* next) :
@@ -39,7 +38,7 @@ ObjectBitSet<F>::BitMapFragment::BitMapFragment(uintptr_t granule, BitMapFragmen
39
38
40
39
template <MEMFLAGS F>
41
40
ObjectBitSet<F>::ObjectBitSet() :
42
- _bitmap_fragments (32 ),
41
+ _bitmap_fragments (32 , 8 *K ),
43
42
_fragment_list(NULL ),
44
43
_last_fragment_bits(NULL ),
45
44
_last_fragment_granule(UINTPTR_MAX) {
@@ -53,52 +52,8 @@ ObjectBitSet<F>::~ObjectBitSet() {
53
52
delete current;
54
53
current = next;
55
54
}
56
- }
57
-
58
- template <MEMFLAGS F>
59
- ObjectBitSet<F>::BitMapFragmentTable::~BitMapFragmentTable () {
60
- for (int index = 0 ; index < BasicHashtable<F>::table_size (); index ++) {
61
- Entry* e = bucket (index );
62
- while (e != nullptr ) {
63
- Entry* tmp = e;
64
- e = e->next ();
65
- BasicHashtable<F>::free_entry (tmp);
66
- }
67
- }
68
- }
69
-
70
- template <MEMFLAGS F>
71
- inline typename ObjectBitSet<F>::BitMapFragmentTable::Entry* ObjectBitSet<F>::BitMapFragmentTable::bucket(int i) const {
72
- return (Entry*)BasicHashtable<F>::bucket (i);
73
- }
74
-
75
- template <MEMFLAGS F>
76
- inline typename ObjectBitSet<F>::BitMapFragmentTable::Entry*
77
- ObjectBitSet<F>::BitMapFragmentTable::new_entry(unsigned int hash, uintptr_t key, CHeapBitMap* value) {
78
-
79
- Entry* entry = (Entry*)BasicHashtable<F>::new_entry (hash);
80
- entry->_key = key;
81
- entry->_value = value;
82
- return entry;
83
- }
84
-
85
- template <MEMFLAGS F>
86
- inline void ObjectBitSet<F>::BitMapFragmentTable::add(uintptr_t key, CHeapBitMap* value) {
87
- unsigned hash = hash_segment (key);
88
- Entry* entry = new_entry (hash, key, value);
89
- BasicHashtable<F>::add_entry (hash_to_index (hash), entry);
90
- }
91
-
92
- template <MEMFLAGS F>
93
- inline CHeapBitMap** ObjectBitSet<F>::BitMapFragmentTable::lookup(uintptr_t key) {
94
- unsigned hash = hash_segment (key);
95
- int index = hash_to_index (hash);
96
- for (Entry* e = bucket (index ); e != NULL ; e = e->next ()) {
97
- if (e->hash () == hash && e->_key == key) {
98
- return &(e->_value );
99
- }
100
- }
101
- return NULL ;
55
+ // destructors for ResourceHashtable base deletes nodes, and
56
+ // ResizeableResourceHashtableStorage deletes the table.
102
57
}
103
58
104
59
template <MEMFLAGS F>
@@ -114,17 +69,15 @@ inline CHeapBitMap* ObjectBitSet<F>::get_fragment_bits(uintptr_t addr) {
114
69
}
115
70
CHeapBitMap* bits = NULL ;
116
71
117
- CHeapBitMap** found = _bitmap_fragments.lookup (granule);
72
+ CHeapBitMap** found = _bitmap_fragments.get (granule);
118
73
if (found != NULL ) {
119
74
bits = *found;
120
75
} else {
121
76
BitMapFragment* fragment = new BitMapFragment (granule, _fragment_list);
122
77
bits = fragment->bits ();
123
78
_fragment_list = fragment;
124
- if (_bitmap_fragments.number_of_entries () * 100 / _bitmap_fragments.table_size () > 25 ) {
125
- _bitmap_fragments.resize (_bitmap_fragments.table_size () * 2 );
126
- }
127
- _bitmap_fragments.add (granule, bits);
79
+ _bitmap_fragments.put (granule, bits);
80
+ _bitmap_fragments.maybe_grow ();
128
81
}
129
82
130
83
_last_fragment_bits = bits;
0 commit comments