Mercurial > hg > truffle
annotate src/share/vm/memory/binaryTreeDictionary.hpp @ 20543:e7d0505c8a30
8059758: Footprint regressions with JDK-8038423
Summary: Changes in JDK-8038423 always initialize (zero out) virtual memory used for auxiliary data structures. This causes a footprint regression for G1 in startup benchmarks. This is because they do not touch that memory at all, so the operating system does not actually commit these pages. The fix is to, if the initialization value of the data structures matches the default value of just committed memory (=0), do not do anything.
Reviewed-by: jwilhelm, brutisso
author | tschatzl |
---|---|
date | Fri, 10 Oct 2014 15:51:58 +0200 |
parents | ab36007d6358 |
children | 52b4284cb496 |
rev | line source |
---|---|
0 | 1 /* |
17467
55fb97c4c58d
8029233: Update copyright year to match last edit in jdk8 hotspot repository for 2013
mikael
parents:
7947
diff
changeset
|
2 * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. |
0 | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 * | |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1145
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1145
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1145
diff
changeset
|
21 * questions. |
0 | 22 * |
23 */ | |
24 | |
6026 | 25 #ifndef SHARE_VM_MEMORY_BINARYTREEDICTIONARY_HPP |
26 #define SHARE_VM_MEMORY_BINARYTREEDICTIONARY_HPP | |
1972 | 27 |
6026 | 28 #include "memory/freeBlockDictionary.hpp" |
29 #include "memory/freeList.hpp" | |
1972 | 30 |
0 | 31 /* |
32 * A binary tree based search structure for free blocks. | |
6026 | 33 * This is currently used in the Concurrent Mark&Sweep implementation, but |
34 * will be used for free block management for metadata. | |
0 | 35 */ |
36 | |
37 // A TreeList is a FreeList which can be used to maintain a | |
38 // binary tree of free lists. | |
39 | |
17695
ab36007d6358
8034171: Remove use of template template parameters from binaryTreeDictionary.
goetz
parents:
17467
diff
changeset
|
40 template <class Chunk_t, class FreeList_t> class TreeChunk; |
ab36007d6358
8034171: Remove use of template template parameters from binaryTreeDictionary.
goetz
parents:
17467
diff
changeset
|
41 template <class Chunk_t, class FreeList_t> class BinaryTreeDictionary; |
ab36007d6358
8034171: Remove use of template template parameters from binaryTreeDictionary.
goetz
parents:
17467
diff
changeset
|
42 template <class Chunk_t, class FreeList_t> class AscendTreeCensusClosure; |
ab36007d6358
8034171: Remove use of template template parameters from binaryTreeDictionary.
goetz
parents:
17467
diff
changeset
|
43 template <class Chunk_t, class FreeList_t> class DescendTreeCensusClosure; |
ab36007d6358
8034171: Remove use of template template parameters from binaryTreeDictionary.
goetz
parents:
17467
diff
changeset
|
44 template <class Chunk_t, class FreeList_t> class DescendTreeSearchClosure; |
0 | 45 |
7947
3c327c2b6782
8004895: NPG: JMapPermCore test failure caused by warnings about missing field
jmasa
parents:
6886
diff
changeset
|
46 class FreeChunk; |
3c327c2b6782
8004895: NPG: JMapPermCore test failure caused by warnings about missing field
jmasa
parents:
6886
diff
changeset
|
47 template <class> class AdaptiveFreeList; |
17695
ab36007d6358
8034171: Remove use of template template parameters from binaryTreeDictionary.
goetz
parents:
17467
diff
changeset
|
48 typedef BinaryTreeDictionary<FreeChunk, AdaptiveFreeList<FreeChunk> > AFLBinaryTreeDictionary; |
7947
3c327c2b6782
8004895: NPG: JMapPermCore test failure caused by warnings about missing field
jmasa
parents:
6886
diff
changeset
|
49 |
17695
ab36007d6358
8034171: Remove use of template template parameters from binaryTreeDictionary.
goetz
parents:
17467
diff
changeset
|
50 template <class Chunk_t, class FreeList_t> |
ab36007d6358
8034171: Remove use of template template parameters from binaryTreeDictionary.
goetz
parents:
17467
diff
changeset
|
51 class TreeList : public FreeList_t { |
6885 | 52 friend class TreeChunk<Chunk_t, FreeList_t>; |
53 friend class BinaryTreeDictionary<Chunk_t, FreeList_t>; | |
54 friend class AscendTreeCensusClosure<Chunk_t, FreeList_t>; | |
55 friend class DescendTreeCensusClosure<Chunk_t, FreeList_t>; | |
56 friend class DescendTreeSearchClosure<Chunk_t, FreeList_t>; | |
6026 | 57 |
6885 | 58 TreeList<Chunk_t, FreeList_t>* _parent; |
59 TreeList<Chunk_t, FreeList_t>* _left; | |
60 TreeList<Chunk_t, FreeList_t>* _right; | |
0 | 61 |
62 protected: | |
6026 | 63 |
6885 | 64 TreeList<Chunk_t, FreeList_t>* parent() const { return _parent; } |
65 TreeList<Chunk_t, FreeList_t>* left() const { return _left; } | |
66 TreeList<Chunk_t, FreeList_t>* right() const { return _right; } | |
6026 | 67 |
6885 | 68 // Wrapper on call to base class, to get the template to compile. |
17695
ab36007d6358
8034171: Remove use of template template parameters from binaryTreeDictionary.
goetz
parents:
17467
diff
changeset
|
69 Chunk_t* head() const { return FreeList_t::head(); } |
ab36007d6358
8034171: Remove use of template template parameters from binaryTreeDictionary.
goetz
parents:
17467
diff
changeset
|
70 Chunk_t* tail() const { return FreeList_t::tail(); } |
ab36007d6358
8034171: Remove use of template template parameters from binaryTreeDictionary.
goetz
parents:
17467
diff
changeset
|
71 void set_head(Chunk_t* head) { FreeList_t::set_head(head); } |
ab36007d6358
8034171: Remove use of template template parameters from binaryTreeDictionary.
goetz
parents:
17467
diff
changeset
|
72 void set_tail(Chunk_t* tail) { FreeList_t::set_tail(tail); } |
6119
a297b0e14605
7172226: HotSpot fails to build with GCC 4.7 because of stricter c++ argument dependent lookup
mgerdin
parents:
6028
diff
changeset
|
73 |
17695
ab36007d6358
8034171: Remove use of template template parameters from binaryTreeDictionary.
goetz
parents:
17467
diff
changeset
|
74 size_t size() const { return FreeList_t::size(); } |
0 | 75 |
76 // Accessors for links in tree. | |
77 | |
6885 | 78 void set_left(TreeList<Chunk_t, FreeList_t>* tl) { |
0 | 79 _left = tl; |
80 if (tl != NULL) | |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
81 tl->set_parent(this); |
0 | 82 } |
6885 | 83 void set_right(TreeList<Chunk_t, FreeList_t>* tl) { |
0 | 84 _right = tl; |
85 if (tl != NULL) | |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
86 tl->set_parent(this); |
0 | 87 } |
6885 | 88 void set_parent(TreeList<Chunk_t, FreeList_t>* tl) { _parent = tl; } |
0 | 89 |
6885 | 90 void clear_left() { _left = NULL; } |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
91 void clear_right() { _right = NULL; } |
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
92 void clear_parent() { _parent = NULL; } |
17695
ab36007d6358
8034171: Remove use of template template parameters from binaryTreeDictionary.
goetz
parents:
17467
diff
changeset
|
93 void initialize() { clear_left(); clear_right(), clear_parent(); FreeList_t::initialize(); } |
0 | 94 |
95 // For constructing a TreeList from a Tree chunk or | |
96 // address and size. | |
6885 | 97 TreeList(); |
98 static TreeList<Chunk_t, FreeList_t>* | |
99 as_TreeList(TreeChunk<Chunk_t, FreeList_t>* tc); | |
100 static TreeList<Chunk_t, FreeList_t>* as_TreeList(HeapWord* addr, size_t size); | |
0 | 101 |
102 // Returns the head of the free list as a pointer to a TreeChunk. | |
6885 | 103 TreeChunk<Chunk_t, FreeList_t>* head_as_TreeChunk(); |
0 | 104 |
105 // Returns the first available chunk in the free list as a pointer | |
106 // to a TreeChunk. | |
6885 | 107 TreeChunk<Chunk_t, FreeList_t>* first_available(); |
0 | 108 |
1145
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
196
diff
changeset
|
109 // Returns the block with the largest heap address amongst |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
196
diff
changeset
|
110 // those in the list for this size; potentially slow and expensive, |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
196
diff
changeset
|
111 // use with caution! |
6885 | 112 TreeChunk<Chunk_t, FreeList_t>* largest_address(); |
113 | |
114 TreeList<Chunk_t, FreeList_t>* get_better_list( | |
115 BinaryTreeDictionary<Chunk_t, FreeList_t>* dictionary); | |
1145
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
196
diff
changeset
|
116 |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
117 // remove_chunk_replace_if_needed() removes the given "tc" from the TreeList. |
0 | 118 // If "tc" is the first chunk in the list, it is also the |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
119 // TreeList that is the node in the tree. remove_chunk_replace_if_needed() |
0 | 120 // returns the possibly replaced TreeList* for the node in |
121 // the tree. It also updates the parent of the original | |
122 // node to point to the new node. | |
6885 | 123 TreeList<Chunk_t, FreeList_t>* remove_chunk_replace_if_needed(TreeChunk<Chunk_t, FreeList_t>* tc); |
0 | 124 // See FreeList. |
6885 | 125 void return_chunk_at_head(TreeChunk<Chunk_t, FreeList_t>* tc); |
126 void return_chunk_at_tail(TreeChunk<Chunk_t, FreeList_t>* tc); | |
0 | 127 }; |
128 | |
6026 | 129 // A TreeChunk is a subclass of a Chunk that additionally |
0 | 130 // maintains a pointer to the free list on which it is currently |
131 // linked. | |
132 // A TreeChunk is also used as a node in the binary tree. This | |
133 // allows the binary tree to be maintained without any additional | |
134 // storage (the free chunks are used). In a binary tree the first | |
135 // chunk in the free list is also the tree node. Note that the | |
136 // TreeChunk has an embedded TreeList for this purpose. Because | |
137 // the first chunk in the list is distinguished in this fashion | |
138 // (also is the node in the tree), it is the last chunk to be found | |
139 // on the free list for a node in the tree and is only removed if | |
140 // it is the last chunk on the free list. | |
141 | |
17695
ab36007d6358
8034171: Remove use of template template parameters from binaryTreeDictionary.
goetz
parents:
17467
diff
changeset
|
142 template <class Chunk_t, class FreeList_t> |
6885 | 143 class TreeChunk : public Chunk_t { |
144 friend class TreeList<Chunk_t, FreeList_t>; | |
145 TreeList<Chunk_t, FreeList_t>* _list; | |
146 TreeList<Chunk_t, FreeList_t> _embedded_list; // if non-null, this chunk is on _list | |
147 | |
148 static size_t _min_tree_chunk_size; | |
149 | |
0 | 150 protected: |
6885 | 151 TreeList<Chunk_t, FreeList_t>* embedded_list() const { return (TreeList<Chunk_t, FreeList_t>*) &_embedded_list; } |
152 void set_embedded_list(TreeList<Chunk_t, FreeList_t>* v) { _embedded_list = *v; } | |
0 | 153 public: |
6885 | 154 TreeList<Chunk_t, FreeList_t>* list() { return _list; } |
155 void set_list(TreeList<Chunk_t, FreeList_t>* v) { _list = v; } | |
156 static TreeChunk<Chunk_t, FreeList_t>* as_TreeChunk(Chunk_t* fc); | |
0 | 157 // Initialize fields in a TreeChunk that should be |
158 // initialized when the TreeChunk is being added to | |
159 // a free list in the tree. | |
160 void initialize() { embedded_list()->initialize(); } | |
161 | |
6885 | 162 Chunk_t* next() const { return Chunk_t::next(); } |
163 Chunk_t* prev() const { return Chunk_t::prev(); } | |
164 size_t size() const volatile { return Chunk_t::size(); } | |
165 | |
166 static size_t min_size() { | |
167 return _min_tree_chunk_size; | |
168 } | |
6026 | 169 |
0 | 170 // debugging |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
171 void verify_tree_chunk_list() const; |
6885 | 172 void assert_is_mangled() const; |
0 | 173 }; |
174 | |
175 | |
17695
ab36007d6358
8034171: Remove use of template template parameters from binaryTreeDictionary.
goetz
parents:
17467
diff
changeset
|
176 template <class Chunk_t, class FreeList_t> |
6885 | 177 class BinaryTreeDictionary: public FreeBlockDictionary<Chunk_t> { |
152
c70a245cad3a
6670684: 4/5 SA command universe did not print out CMS space information
dcubed
parents:
0
diff
changeset
|
178 friend class VMStructs; |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
179 size_t _total_size; |
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
180 size_t _total_free_blocks; |
6885 | 181 TreeList<Chunk_t, FreeList_t>* _root; |
0 | 182 |
183 // private accessors | |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
184 void set_total_size(size_t v) { _total_size = v; } |
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
185 virtual void inc_total_size(size_t v); |
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
186 virtual void dec_total_size(size_t v); |
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
187 void set_total_free_blocks(size_t v) { _total_free_blocks = v; } |
6885 | 188 TreeList<Chunk_t, FreeList_t>* root() const { return _root; } |
189 void set_root(TreeList<Chunk_t, FreeList_t>* v) { _root = v; } | |
6026 | 190 |
191 // This field is added and can be set to point to the | |
192 // the Mutex used to synchronize access to the | |
193 // dictionary so that assertion checking can be done. | |
194 // For example it is set to point to _parDictionaryAllocLock. | |
195 NOT_PRODUCT(Mutex* _lock;) | |
0 | 196 |
197 // Remove a chunk of size "size" or larger from the tree and | |
198 // return it. If the chunk | |
199 // is the last chunk of that size, remove the node for that size | |
200 // from the tree. | |
6885 | 201 TreeChunk<Chunk_t, FreeList_t>* get_chunk_from_tree(size_t size, enum FreeBlockDictionary<Chunk_t>::Dither dither); |
0 | 202 // Remove this chunk from the tree. If the removal results |
203 // in an empty list in the tree, remove the empty list. | |
6885 | 204 TreeChunk<Chunk_t, FreeList_t>* remove_chunk_from_tree(TreeChunk<Chunk_t, FreeList_t>* tc); |
0 | 205 // Remove the node in the trees starting at tl that has the |
206 // minimum value and return it. Repair the tree as needed. | |
6885 | 207 TreeList<Chunk_t, FreeList_t>* remove_tree_minimum(TreeList<Chunk_t, FreeList_t>* tl); |
0 | 208 // Add this free chunk to the tree. |
6885 | 209 void insert_chunk_in_tree(Chunk_t* freeChunk); |
0 | 210 public: |
6026 | 211 |
6885 | 212 // Return a list of the specified size or NULL from the tree. |
213 // The list is not removed from the tree. | |
214 TreeList<Chunk_t, FreeList_t>* find_list (size_t size) const; | |
6026 | 215 |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
216 void verify_tree() const; |
0 | 217 // verify that the given chunk is in the tree. |
6885 | 218 bool verify_chunk_in_free_list(Chunk_t* tc) const; |
0 | 219 private: |
6885 | 220 void verify_tree_helper(TreeList<Chunk_t, FreeList_t>* tl) const; |
221 static size_t verify_prev_free_ptrs(TreeList<Chunk_t, FreeList_t>* tl); | |
0 | 222 |
223 // Returns the total number of chunks in the list. | |
6885 | 224 size_t total_list_length(TreeList<Chunk_t, FreeList_t>* tl) const; |
0 | 225 // Returns the total number of words in the chunks in the tree |
226 // starting at "tl". | |
6885 | 227 size_t total_size_in_tree(TreeList<Chunk_t, FreeList_t>* tl) const; |
0 | 228 // Returns the sum of the square of the size of each block |
229 // in the tree starting at "tl". | |
6885 | 230 double sum_of_squared_block_sizes(TreeList<Chunk_t, FreeList_t>* const tl) const; |
0 | 231 // Returns the total number of free blocks in the tree starting |
232 // at "tl". | |
6885 | 233 size_t total_free_blocks_in_tree(TreeList<Chunk_t, FreeList_t>* tl) const; |
234 size_t num_free_blocks() const; | |
235 size_t tree_height() const; | |
236 size_t tree_height_helper(TreeList<Chunk_t, FreeList_t>* tl) const; | |
237 size_t total_nodes_in_tree(TreeList<Chunk_t, FreeList_t>* tl) const; | |
238 size_t total_nodes_helper(TreeList<Chunk_t, FreeList_t>* tl) const; | |
0 | 239 |
240 public: | |
241 // Constructor | |
6885 | 242 BinaryTreeDictionary() : |
243 _total_size(0), _total_free_blocks(0), _root(0) {} | |
244 | |
245 BinaryTreeDictionary(MemRegion mr); | |
6026 | 246 |
247 // Public accessors | |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
248 size_t total_size() const { return _total_size; } |
6885 | 249 size_t total_free_blocks() const { return _total_free_blocks; } |
0 | 250 |
251 // Reset the dictionary to the initial conditions with | |
252 // a single free chunk. | |
253 void reset(MemRegion mr); | |
254 void reset(HeapWord* addr, size_t size); | |
255 // Reset the dictionary to be empty. | |
256 void reset(); | |
257 | |
258 // Return a chunk of size "size" or greater from | |
259 // the tree. | |
6885 | 260 Chunk_t* get_chunk(size_t size, enum FreeBlockDictionary<Chunk_t>::Dither dither) { |
261 FreeBlockDictionary<Chunk_t>::verify_par_locked(); | |
262 Chunk_t* res = get_chunk_from_tree(size, dither); | |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
263 assert(res == NULL || res->is_free(), |
0 | 264 "Should be returning a free chunk"); |
6885 | 265 assert(dither != FreeBlockDictionary<Chunk_t>::exactly || |
6886
476718ea6759
8001584: NPG: Incorrect assertion in BinaryTreeDictionary::get_chunk()
jmasa
parents:
6885
diff
changeset
|
266 res == NULL || res->size() == size, "Not correct size"); |
0 | 267 return res; |
268 } | |
269 | |
6885 | 270 void return_chunk(Chunk_t* chunk) { |
271 FreeBlockDictionary<Chunk_t>::verify_par_locked(); | |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
272 insert_chunk_in_tree(chunk); |
0 | 273 } |
274 | |
6885 | 275 void remove_chunk(Chunk_t* chunk) { |
276 FreeBlockDictionary<Chunk_t>::verify_par_locked(); | |
277 remove_chunk_from_tree((TreeChunk<Chunk_t, FreeList_t>*)chunk); | |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
278 assert(chunk->is_free(), "Should still be a free chunk"); |
0 | 279 } |
280 | |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
281 size_t max_chunk_size() const; |
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
282 size_t total_chunk_size(debug_only(const Mutex* lock)) const { |
0 | 283 debug_only( |
284 if (lock != NULL && lock->owned_by_self()) { | |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
285 assert(total_size_in_tree(root()) == total_size(), |
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
286 "_total_size inconsistency"); |
0 | 287 } |
288 ) | |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
289 return total_size(); |
0 | 290 } |
291 | |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
292 size_t min_size() const { |
6885 | 293 return TreeChunk<Chunk_t, FreeList_t>::min_size(); |
0 | 294 } |
295 | |
296 double sum_of_squared_block_sizes() const { | |
297 return sum_of_squared_block_sizes(root()); | |
298 } | |
299 | |
6885 | 300 Chunk_t* find_chunk_ends_at(HeapWord* target) const; |
0 | 301 |
302 // Find the list with size "size" in the binary tree and update | |
303 // the statistics in the list according to "split" (chunk was | |
304 // split or coalesce) and "birth" (chunk was added or removed). | |
6885 | 305 void dict_census_update(size_t size, bool split, bool birth); |
0 | 306 // Return true if the dictionary is overpopulated (more chunks of |
307 // this size than desired) for size "size". | |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
308 bool coal_dict_over_populated(size_t size); |
0 | 309 // Methods called at the beginning of a sweep to prepare the |
310 // statistics for the sweep. | |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
311 void begin_sweep_dict_census(double coalSurplusPercent, |
1145
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
196
diff
changeset
|
312 float inter_sweep_current, |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
196
diff
changeset
|
313 float inter_sweep_estimate, |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
196
diff
changeset
|
314 float intra_sweep_estimate); |
0 | 315 // Methods called after the end of a sweep to modify the |
316 // statistics for the sweep. | |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
317 void end_sweep_dict_census(double splitSurplusPercent); |
0 | 318 // Return the largest free chunk in the tree. |
6885 | 319 Chunk_t* find_largest_dict() const; |
0 | 320 // Accessors for statistics |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
321 void set_tree_surplus(double splitSurplusPercent); |
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
322 void set_tree_hints(void); |
0 | 323 // Reset statistics for all the lists in the tree. |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
324 void clear_tree_census(void); |
0 | 325 // Print the statistcis for all the lists in the tree. Also may |
326 // print out summaries. | |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
327 void print_dict_census(void) const; |
1145
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
196
diff
changeset
|
328 void print_free_lists(outputStream* st) const; |
0 | 329 |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
330 // For debugging. Returns the sum of the _returned_bytes for |
0 | 331 // all lists in the tree. |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
332 size_t sum_dict_returned_bytes() PRODUCT_RETURN0; |
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
333 // Sets the _returned_bytes for all the lists in the tree to zero. |
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
334 void initialize_dict_returned_bytes() PRODUCT_RETURN; |
0 | 335 // For debugging. Return the total number of chunks in the dictionary. |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
336 size_t total_count() PRODUCT_RETURN0; |
0 | 337 |
6028
f69a5d43dc19
7164144: Fix variable naming style in freeBlockDictionary.* and binaryTreeDictionary*
jmasa
parents:
6026
diff
changeset
|
338 void report_statistics() const; |
0 | 339 |
340 void verify() const; | |
341 }; | |
1972 | 342 |
6026 | 343 #endif // SHARE_VM_MEMORY_BINARYTREEDICTIONARY_HPP |