src/share/vm/utilities/hashtable.hpp

changeset 8766
ce9a710b0f63
parent 7207
152cf4afc11f
child 8856
ac27a9c85bea
equal deleted inserted replaced
8764:0bd600d6d77b 8766:ce9a710b0f63
162 162
163 private: 163 private:
164 // Instance variables 164 // Instance variables
165 int _table_size; 165 int _table_size;
166 HashtableBucket<F>* _buckets; 166 HashtableBucket<F>* _buckets;
167 BasicHashtableEntry<F>* _free_list; 167 BasicHashtableEntry<F>* volatile _free_list;
168 char* _first_free_entry; 168 char* _first_free_entry;
169 char* _end_block; 169 char* _end_block;
170 int _entry_size; 170 int _entry_size;
171 int _number_of_entries; 171 volatile int _number_of_entries;
172 172
173 protected: 173 protected:
174 174
175 #ifdef ASSERT 175 #ifdef ASSERT
176 int _lookup_count; 176 int _lookup_count;
213 } 213 }
214 214
215 // Free the buckets in this hashtable 215 // Free the buckets in this hashtable
216 void free_buckets(); 216 void free_buckets();
217 217
218 // Helper data structure containing context for the bucket entry unlink process,
219 // storing the unlinked buckets in a linked list.
220 // Also avoids the need to pass around these four members as parameters everywhere.
221 struct BucketUnlinkContext {
222 int _num_processed;
223 int _num_removed;
224 // Head and tail pointers for the linked list of removed entries.
225 BasicHashtableEntry<F>* _removed_head;
226 BasicHashtableEntry<F>* _removed_tail;
227
228 BucketUnlinkContext() : _num_processed(0), _num_removed(0), _removed_head(NULL), _removed_tail(NULL) {
229 }
230
231 void free_entry(BasicHashtableEntry<F>* entry);
232 };
233 // Add of bucket entries linked together in the given context to the global free list. This method
234 // is mt-safe wrt. to other calls of this method.
235 void bulk_free_entries(BucketUnlinkContext* context);
218 public: 236 public:
219 int table_size() { return _table_size; } 237 int table_size() { return _table_size; }
220 void set_entry(int index, BasicHashtableEntry<F>* entry); 238 void set_entry(int index, BasicHashtableEntry<F>* entry);
221 239
222 void add_entry(int index, BasicHashtableEntry<F>* entry); 240 void add_entry(int index, BasicHashtableEntry<F>* entry);

mercurial