comparison src/share/vm/memory/binaryTreeDictionary.hpp @ 6028:f69a5d43dc19

7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary* Summary: Fix naming style to be consistent with the predominant hotspot style. Reviewed-by: ysr, brutisso
author jmasa
date Wed, 25 Apr 2012 09:55:55 -0700
parents 9f059abe8cf2
children a297b0e14605
comparison
equal deleted inserted replaced
6026:9f059abe8cf2 6028:f69a5d43dc19
68 68
69 size_t size() const { return FreeList<Chunk>::size(); } 69 size_t size() const { return FreeList<Chunk>::size(); }
70 70
71 // Accessors for links in tree. 71 // Accessors for links in tree.
72 72
73 void setLeft(TreeList<Chunk>* tl) { 73 void set_left(TreeList<Chunk>* tl) {
74 _left = tl; 74 _left = tl;
75 if (tl != NULL) 75 if (tl != NULL)
76 tl->setParent(this); 76 tl->set_parent(this);
77 } 77 }
78 void setRight(TreeList<Chunk>* tl) { 78 void set_right(TreeList<Chunk>* tl) {
79 _right = tl; 79 _right = tl;
80 if (tl != NULL) 80 if (tl != NULL)
81 tl->setParent(this); 81 tl->set_parent(this);
82 } 82 }
83 void setParent(TreeList<Chunk>* tl) { _parent = tl; } 83 void set_parent(TreeList<Chunk>* tl) { _parent = tl; }
84 84
85 void clearLeft() { _left = NULL; } 85 void clearLeft() { _left = NULL; }
86 void clearRight() { _right = NULL; } 86 void clear_right() { _right = NULL; }
87 void clearParent() { _parent = NULL; } 87 void clear_parent() { _parent = NULL; }
88 void initialize() { clearLeft(); clearRight(), clearParent(); } 88 void initialize() { clearLeft(); clear_right(), clear_parent(); }
89 89
90 // For constructing a TreeList from a Tree chunk or 90 // For constructing a TreeList from a Tree chunk or
91 // address and size. 91 // address and size.
92 static TreeList<Chunk>* as_TreeList(TreeChunk<Chunk>* tc); 92 static TreeList<Chunk>* as_TreeList(TreeChunk<Chunk>* tc);
93 static TreeList<Chunk>* as_TreeList(HeapWord* addr, size_t size); 93 static TreeList<Chunk>* as_TreeList(HeapWord* addr, size_t size);
102 // Returns the block with the largest heap address amongst 102 // Returns the block with the largest heap address amongst
103 // those in the list for this size; potentially slow and expensive, 103 // those in the list for this size; potentially slow and expensive,
104 // use with caution! 104 // use with caution!
105 TreeChunk<Chunk>* largest_address(); 105 TreeChunk<Chunk>* largest_address();
106 106
107 // removeChunkReplaceIfNeeded() removes the given "tc" from the TreeList. 107 // remove_chunk_replace_if_needed() removes the given "tc" from the TreeList.
108 // If "tc" is the first chunk in the list, it is also the 108 // If "tc" is the first chunk in the list, it is also the
109 // TreeList that is the node in the tree. removeChunkReplaceIfNeeded() 109 // TreeList that is the node in the tree. remove_chunk_replace_if_needed()
110 // returns the possibly replaced TreeList* for the node in 110 // returns the possibly replaced TreeList* for the node in
111 // the tree. It also updates the parent of the original 111 // the tree. It also updates the parent of the original
112 // node to point to the new node. 112 // node to point to the new node.
113 TreeList<Chunk>* removeChunkReplaceIfNeeded(TreeChunk<Chunk>* tc); 113 TreeList<Chunk>* remove_chunk_replace_if_needed(TreeChunk<Chunk>* tc);
114 // See FreeList. 114 // See FreeList.
115 void returnChunkAtHead(TreeChunk<Chunk>* tc); 115 void return_chunk_at_head(TreeChunk<Chunk>* tc);
116 void returnChunkAtTail(TreeChunk<Chunk>* tc); 116 void return_chunk_at_tail(TreeChunk<Chunk>* tc);
117 }; 117 };
118 118
119 // A TreeChunk is a subclass of a Chunk that additionally 119 // A TreeChunk is a subclass of a Chunk that additionally
120 // maintains a pointer to the free list on which it is currently 120 // maintains a pointer to the free list on which it is currently
121 // linked. 121 // linked.
149 Chunk* next() const { return Chunk::next(); } 149 Chunk* next() const { return Chunk::next(); }
150 Chunk* prev() const { return Chunk::prev(); } 150 Chunk* prev() const { return Chunk::prev(); }
151 size_t size() const volatile { return Chunk::size(); } 151 size_t size() const volatile { return Chunk::size(); }
152 152
153 // debugging 153 // debugging
154 void verifyTreeChunkList() const; 154 void verify_tree_chunk_list() const;
155 }; 155 };
156 156
157 157
158 template <class Chunk> 158 template <class Chunk>
159 class BinaryTreeDictionary: public FreeBlockDictionary<Chunk> { 159 class BinaryTreeDictionary: public FreeBlockDictionary<Chunk> {
160 friend class VMStructs; 160 friend class VMStructs;
161 bool _splay; 161 bool _splay;
162 size_t _totalSize; 162 size_t _total_size;
163 size_t _totalFreeBlocks; 163 size_t _total_free_blocks;
164 TreeList<Chunk>* _root; 164 TreeList<Chunk>* _root;
165 bool _adaptive_freelists; 165 bool _adaptive_freelists;
166 166
167 // private accessors 167 // private accessors
168 bool splay() const { return _splay; } 168 bool splay() const { return _splay; }
169 void set_splay(bool v) { _splay = v; } 169 void set_splay(bool v) { _splay = v; }
170 void set_totalSize(size_t v) { _totalSize = v; } 170 void set_total_size(size_t v) { _total_size = v; }
171 virtual void inc_totalSize(size_t v); 171 virtual void inc_total_size(size_t v);
172 virtual void dec_totalSize(size_t v); 172 virtual void dec_total_size(size_t v);
173 size_t totalFreeBlocks() const { return _totalFreeBlocks; } 173 size_t total_free_blocks() const { return _total_free_blocks; }
174 void set_totalFreeBlocks(size_t v) { _totalFreeBlocks = v; } 174 void set_total_free_blocks(size_t v) { _total_free_blocks = v; }
175 TreeList<Chunk>* root() const { return _root; } 175 TreeList<Chunk>* root() const { return _root; }
176 void set_root(TreeList<Chunk>* v) { _root = v; } 176 void set_root(TreeList<Chunk>* v) { _root = v; }
177 bool adaptive_freelists() { return _adaptive_freelists; } 177 bool adaptive_freelists() { return _adaptive_freelists; }
178 178
179 // This field is added and can be set to point to the 179 // This field is added and can be set to point to the
184 184
185 // Remove a chunk of size "size" or larger from the tree and 185 // Remove a chunk of size "size" or larger from the tree and
186 // return it. If the chunk 186 // return it. If the chunk
187 // is the last chunk of that size, remove the node for that size 187 // is the last chunk of that size, remove the node for that size
188 // from the tree. 188 // from the tree.
189 TreeChunk<Chunk>* getChunkFromTree(size_t size, enum FreeBlockDictionary<Chunk>::Dither dither, bool splay); 189 TreeChunk<Chunk>* get_chunk_from_tree(size_t size, enum FreeBlockDictionary<Chunk>::Dither dither, bool splay);
190 // Return a list of the specified size or NULL from the tree. 190 // Return a list of the specified size or NULL from the tree.
191 // The list is not removed from the tree. 191 // The list is not removed from the tree.
192 TreeList<Chunk>* findList (size_t size) const; 192 TreeList<Chunk>* find_list (size_t size) const;
193 // Remove this chunk from the tree. If the removal results 193 // Remove this chunk from the tree. If the removal results
194 // in an empty list in the tree, remove the empty list. 194 // in an empty list in the tree, remove the empty list.
195 TreeChunk<Chunk>* removeChunkFromTree(TreeChunk<Chunk>* tc); 195 TreeChunk<Chunk>* remove_chunk_from_tree(TreeChunk<Chunk>* tc);
196 // Remove the node in the trees starting at tl that has the 196 // Remove the node in the trees starting at tl that has the
197 // minimum value and return it. Repair the tree as needed. 197 // minimum value and return it. Repair the tree as needed.
198 TreeList<Chunk>* removeTreeMinimum(TreeList<Chunk>* tl); 198 TreeList<Chunk>* remove_tree_minimum(TreeList<Chunk>* tl);
199 void semiSplayStep(TreeList<Chunk>* tl); 199 void semi_splay_step(TreeList<Chunk>* tl);
200 // Add this free chunk to the tree. 200 // Add this free chunk to the tree.
201 void insertChunkInTree(Chunk* freeChunk); 201 void insert_chunk_in_tree(Chunk* freeChunk);
202 public: 202 public:
203 203
204 static const size_t min_tree_chunk_size = sizeof(TreeChunk<Chunk>)/HeapWordSize; 204 static const size_t min_tree_chunk_size = sizeof(TreeChunk<Chunk>)/HeapWordSize;
205 205
206 void verifyTree() const; 206 void verify_tree() const;
207 // verify that the given chunk is in the tree. 207 // verify that the given chunk is in the tree.
208 bool verifyChunkInFreeLists(Chunk* tc) const; 208 bool verify_chunk_in_free_list(Chunk* tc) const;
209 private: 209 private:
210 void verifyTreeHelper(TreeList<Chunk>* tl) const; 210 void verify_tree_helper(TreeList<Chunk>* tl) const;
211 static size_t verifyPrevFreePtrs(TreeList<Chunk>* tl); 211 static size_t verify_prev_free_ptrs(TreeList<Chunk>* tl);
212 212
213 // Returns the total number of chunks in the list. 213 // Returns the total number of chunks in the list.
214 size_t totalListLength(TreeList<Chunk>* tl) const; 214 size_t total_list_length(TreeList<Chunk>* tl) const;
215 // Returns the total number of words in the chunks in the tree 215 // Returns the total number of words in the chunks in the tree
216 // starting at "tl". 216 // starting at "tl".
217 size_t totalSizeInTree(TreeList<Chunk>* tl) const; 217 size_t total_size_in_tree(TreeList<Chunk>* tl) const;
218 // Returns the sum of the square of the size of each block 218 // Returns the sum of the square of the size of each block
219 // in the tree starting at "tl". 219 // in the tree starting at "tl".
220 double sum_of_squared_block_sizes(TreeList<Chunk>* const tl) const; 220 double sum_of_squared_block_sizes(TreeList<Chunk>* const tl) const;
221 // Returns the total number of free blocks in the tree starting 221 // Returns the total number of free blocks in the tree starting
222 // at "tl". 222 // at "tl".
223 size_t totalFreeBlocksInTree(TreeList<Chunk>* tl) const; 223 size_t total_free_blocks_in_tree(TreeList<Chunk>* tl) const;
224 size_t numFreeBlocks() const; 224 size_t num_free_blocks() const;
225 size_t treeHeight() const; 225 size_t treeHeight() const;
226 size_t treeHeightHelper(TreeList<Chunk>* tl) const; 226 size_t tree_height_helper(TreeList<Chunk>* tl) const;
227 size_t totalNodesInTree(TreeList<Chunk>* tl) const; 227 size_t total_nodes_in_tree(TreeList<Chunk>* tl) const;
228 size_t totalNodesHelper(TreeList<Chunk>* tl) const; 228 size_t total_nodes_helper(TreeList<Chunk>* tl) const;
229 229
230 public: 230 public:
231 // Constructor 231 // Constructor
232 BinaryTreeDictionary(bool adaptive_freelists, bool splay = false); 232 BinaryTreeDictionary(bool adaptive_freelists, bool splay = false);
233 BinaryTreeDictionary(MemRegion mr, bool adaptive_freelists, bool splay = false); 233 BinaryTreeDictionary(MemRegion mr, bool adaptive_freelists, bool splay = false);
234 234
235 // Public accessors 235 // Public accessors
236 size_t totalSize() const { return _totalSize; } 236 size_t total_size() const { return _total_size; }
237 237
238 // Reset the dictionary to the initial conditions with 238 // Reset the dictionary to the initial conditions with
239 // a single free chunk. 239 // a single free chunk.
240 void reset(MemRegion mr); 240 void reset(MemRegion mr);
241 void reset(HeapWord* addr, size_t size); 241 void reset(HeapWord* addr, size_t size);
243 void reset(); 243 void reset();
244 244
245 // Return a chunk of size "size" or greater from 245 // Return a chunk of size "size" or greater from
246 // the tree. 246 // the tree.
247 // want a better dynamic splay strategy for the future. 247 // want a better dynamic splay strategy for the future.
248 Chunk* getChunk(size_t size, enum FreeBlockDictionary<Chunk>::Dither dither) { 248 Chunk* get_chunk(size_t size, enum FreeBlockDictionary<Chunk>::Dither dither) {
249 FreeBlockDictionary<Chunk>::verify_par_locked(); 249 FreeBlockDictionary<Chunk>::verify_par_locked();
250 Chunk* res = getChunkFromTree(size, dither, splay()); 250 Chunk* res = get_chunk_from_tree(size, dither, splay());
251 assert(res == NULL || res->isFree(), 251 assert(res == NULL || res->is_free(),
252 "Should be returning a free chunk"); 252 "Should be returning a free chunk");
253 return res; 253 return res;
254 } 254 }
255 255
256 void returnChunk(Chunk* chunk) { 256 void return_chunk(Chunk* chunk) {
257 FreeBlockDictionary<Chunk>::verify_par_locked(); 257 FreeBlockDictionary<Chunk>::verify_par_locked();
258 insertChunkInTree(chunk); 258 insert_chunk_in_tree(chunk);
259 } 259 }
260 260
261 void removeChunk(Chunk* chunk) { 261 void remove_chunk(Chunk* chunk) {
262 FreeBlockDictionary<Chunk>::verify_par_locked(); 262 FreeBlockDictionary<Chunk>::verify_par_locked();
263 removeChunkFromTree((TreeChunk<Chunk>*)chunk); 263 remove_chunk_from_tree((TreeChunk<Chunk>*)chunk);
264 assert(chunk->isFree(), "Should still be a free chunk"); 264 assert(chunk->is_free(), "Should still be a free chunk");
265 } 265 }
266 266
267 size_t maxChunkSize() const; 267 size_t max_chunk_size() const;
268 size_t totalChunkSize(debug_only(const Mutex* lock)) const { 268 size_t total_chunk_size(debug_only(const Mutex* lock)) const {
269 debug_only( 269 debug_only(
270 if (lock != NULL && lock->owned_by_self()) { 270 if (lock != NULL && lock->owned_by_self()) {
271 assert(totalSizeInTree(root()) == totalSize(), 271 assert(total_size_in_tree(root()) == total_size(),
272 "_totalSize inconsistency"); 272 "_total_size inconsistency");
273 } 273 }
274 ) 274 )
275 return totalSize(); 275 return total_size();
276 } 276 }
277 277
278 size_t minSize() const { 278 size_t min_size() const {
279 return min_tree_chunk_size; 279 return min_tree_chunk_size;
280 } 280 }
281 281
282 double sum_of_squared_block_sizes() const { 282 double sum_of_squared_block_sizes() const {
283 return sum_of_squared_block_sizes(root()); 283 return sum_of_squared_block_sizes(root());
286 Chunk* find_chunk_ends_at(HeapWord* target) const; 286 Chunk* find_chunk_ends_at(HeapWord* target) const;
287 287
288 // Find the list with size "size" in the binary tree and update 288 // Find the list with size "size" in the binary tree and update
289 // the statistics in the list according to "split" (chunk was 289 // the statistics in the list according to "split" (chunk was
290 // split or coalesce) and "birth" (chunk was added or removed). 290 // split or coalesce) and "birth" (chunk was added or removed).
291 void dictCensusUpdate(size_t size, bool split, bool birth); 291 void dict_census_udpate(size_t size, bool split, bool birth);
292 // Return true if the dictionary is overpopulated (more chunks of 292 // Return true if the dictionary is overpopulated (more chunks of
293 // this size than desired) for size "size". 293 // this size than desired) for size "size".
294 bool coalDictOverPopulated(size_t size); 294 bool coal_dict_over_populated(size_t size);
295 // Methods called at the beginning of a sweep to prepare the 295 // Methods called at the beginning of a sweep to prepare the
296 // statistics for the sweep. 296 // statistics for the sweep.
297 void beginSweepDictCensus(double coalSurplusPercent, 297 void begin_sweep_dict_census(double coalSurplusPercent,
298 float inter_sweep_current, 298 float inter_sweep_current,
299 float inter_sweep_estimate, 299 float inter_sweep_estimate,
300 float intra_sweep_estimate); 300 float intra_sweep_estimate);
301 // Methods called after the end of a sweep to modify the 301 // Methods called after the end of a sweep to modify the
302 // statistics for the sweep. 302 // statistics for the sweep.
303 void endSweepDictCensus(double splitSurplusPercent); 303 void end_sweep_dict_census(double splitSurplusPercent);
304 // Return the largest free chunk in the tree. 304 // Return the largest free chunk in the tree.
305 Chunk* findLargestDict() const; 305 Chunk* find_largest_dict() const;
306 // Accessors for statistics 306 // Accessors for statistics
307 void setTreeSurplus(double splitSurplusPercent); 307 void set_tree_surplus(double splitSurplusPercent);
308 void setTreeHints(void); 308 void set_tree_hints(void);
309 // Reset statistics for all the lists in the tree. 309 // Reset statistics for all the lists in the tree.
310 void clearTreeCensus(void); 310 void clear_tree_census(void);
311 // Print the statistcis for all the lists in the tree. Also may 311 // Print the statistcis for all the lists in the tree. Also may
312 // print out summaries. 312 // print out summaries.
313 void printDictCensus(void) const; 313 void print_dict_census(void) const;
314 void print_free_lists(outputStream* st) const; 314 void print_free_lists(outputStream* st) const;
315 315
316 // For debugging. Returns the sum of the _returnedBytes for 316 // For debugging. Returns the sum of the _returned_bytes for
317 // all lists in the tree. 317 // all lists in the tree.
318 size_t sumDictReturnedBytes() PRODUCT_RETURN0; 318 size_t sum_dict_returned_bytes() PRODUCT_RETURN0;
319 // Sets the _returnedBytes for all the lists in the tree to zero. 319 // Sets the _returned_bytes for all the lists in the tree to zero.
320 void initializeDictReturnedBytes() PRODUCT_RETURN; 320 void initialize_dict_returned_bytes() PRODUCT_RETURN;
321 // For debugging. Return the total number of chunks in the dictionary. 321 // For debugging. Return the total number of chunks in the dictionary.
322 size_t totalCount() PRODUCT_RETURN0; 322 size_t total_count() PRODUCT_RETURN0;
323 323
324 void reportStatistics() const; 324 void report_statistics() const;
325 325
326 void verify() const; 326 void verify() const;
327 }; 327 };
328 328
329 #endif // SHARE_VM_MEMORY_BINARYTREEDICTIONARY_HPP 329 #endif // SHARE_VM_MEMORY_BINARYTREEDICTIONARY_HPP