annotate src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp @ 10374:87c64c0438fb

6976350: G1: deal with fragmentation while copying objects during GC Summary: Create G1ParGCAllocBufferContainer to contain two buffers instead of previously using one buffer, in order to hold the first priority buffer longer. Thus, when some large objects hits the value of free space left in the first priority buffer it has an alternative to fit in the second priority buffer while the first priority buffer is given more chances to try allocating smaller objects. Overall, it will improve heap space efficiency. Reviewed-by: johnc, jmasa, brutisso Contributed-by: tamao <tao.mao@oracle.com>
author tamao
date Mon, 03 Jun 2013 14:37:13 -0700
parents db9981fd3124
children de6a9e811145
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
6008
b632e80fc9dc 4988100: oop_verify_old_oop appears to be dead
brutisso
parents: 1972
diff changeset
2 * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 579
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 579
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: 579
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
25 #ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_MUTABLENUMASPACE_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
26 #define SHARE_VM_GC_IMPLEMENTATION_SHARED_MUTABLENUMASPACE_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
27
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6197
diff changeset
28 #include "utilities/macros.hpp"
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6197
diff changeset
29 #if INCLUDE_ALL_GCS
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
30 #include "gc_implementation/shared/gcUtil.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
31 #include "gc_implementation/shared/mutableSpace.hpp"
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6197
diff changeset
32 #endif // INCLUDE_ALL_GCS
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
33
0
a61af66fc99e Initial load
duke
parents:
diff changeset
34 /*
a61af66fc99e Initial load
duke
parents:
diff changeset
35 * The NUMA-aware allocator (MutableNUMASpace) is basically a modification
a61af66fc99e Initial load
duke
parents:
diff changeset
36 * of MutableSpace which preserves interfaces but implements different
a61af66fc99e Initial load
duke
parents:
diff changeset
37 * functionality. The space is split into chunks for each locality group
a61af66fc99e Initial load
duke
parents:
diff changeset
38 * (resizing for adaptive size policy is also supported). For each thread
a61af66fc99e Initial load
duke
parents:
diff changeset
39 * allocations are performed in the chunk corresponding to the home locality
a61af66fc99e Initial load
duke
parents:
diff changeset
40 * group of the thread. Whenever any chunk fills-in the young generation
a61af66fc99e Initial load
duke
parents:
diff changeset
41 * collection occurs.
a61af66fc99e Initial load
duke
parents:
diff changeset
42 * The chunks can be also be adaptively resized. The idea behind the adaptive
a61af66fc99e Initial load
duke
parents:
diff changeset
43 * sizing is to reduce the loss of the space in the eden due to fragmentation.
a61af66fc99e Initial load
duke
parents:
diff changeset
44 * The main cause of fragmentation is uneven allocation rates of threads.
a61af66fc99e Initial load
duke
parents:
diff changeset
45 * The allocation rate difference between locality groups may be caused either by
a61af66fc99e Initial load
duke
parents:
diff changeset
46 * application specifics or by uneven LWP distribution by the OS. Besides,
a61af66fc99e Initial load
duke
parents:
diff changeset
47 * application can have less threads then the number of locality groups.
a61af66fc99e Initial load
duke
parents:
diff changeset
48 * In order to resize the chunk we measure the allocation rate of the
a61af66fc99e Initial load
duke
parents:
diff changeset
49 * application between collections. After that we reshape the chunks to reflect
a61af66fc99e Initial load
duke
parents:
diff changeset
50 * the allocation rate pattern. The AdaptiveWeightedAverage exponentially
a61af66fc99e Initial load
duke
parents:
diff changeset
51 * decaying average is used to smooth the measurements. The NUMASpaceResizeRate
a61af66fc99e Initial load
duke
parents:
diff changeset
52 * parameter is used to control the adaptation speed by restricting the number of
a61af66fc99e Initial load
duke
parents:
diff changeset
53 * bytes that can be moved during the adaptation phase.
a61af66fc99e Initial load
duke
parents:
diff changeset
54 * Chunks may contain pages from a wrong locality group. The page-scanner has
a61af66fc99e Initial load
duke
parents:
diff changeset
55 * been introduced to address the problem. Remote pages typically appear due to
a61af66fc99e Initial load
duke
parents:
diff changeset
56 * the memory shortage in the target locality group. Besides Solaris would
a61af66fc99e Initial load
duke
parents:
diff changeset
57 * allocate a large page from the remote locality group even if there are small
a61af66fc99e Initial load
duke
parents:
diff changeset
58 * local pages available. The page-scanner scans the pages right after the
a61af66fc99e Initial load
duke
parents:
diff changeset
59 * collection and frees remote pages in hope that subsequent reallocation would
a61af66fc99e Initial load
duke
parents:
diff changeset
60 * be more successful. This approach proved to be useful on systems with high
a61af66fc99e Initial load
duke
parents:
diff changeset
61 * load where multiple processes are competing for the memory.
a61af66fc99e Initial load
duke
parents:
diff changeset
62 */
a61af66fc99e Initial load
duke
parents:
diff changeset
63
a61af66fc99e Initial load
duke
parents:
diff changeset
64 class MutableNUMASpace : public MutableSpace {
a61af66fc99e Initial load
duke
parents:
diff changeset
65 friend class VMStructs;
a61af66fc99e Initial load
duke
parents:
diff changeset
66
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 6008
diff changeset
67 class LGRPSpace : public CHeapObj<mtGC> {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
68 int _lgrp_id;
a61af66fc99e Initial load
duke
parents:
diff changeset
69 MutableSpace* _space;
a61af66fc99e Initial load
duke
parents:
diff changeset
70 MemRegion _invalid_region;
a61af66fc99e Initial load
duke
parents:
diff changeset
71 AdaptiveWeightedAverage *_alloc_rate;
373
06df86c2ec37 6740923: NUMA allocator: Ensure the progress of adaptive chunk resizing
iveresov
parents: 269
diff changeset
72 bool _allocation_failed;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
73
a61af66fc99e Initial load
duke
parents:
diff changeset
74 struct SpaceStats {
a61af66fc99e Initial load
duke
parents:
diff changeset
75 size_t _local_space, _remote_space, _unbiased_space, _uncommited_space;
a61af66fc99e Initial load
duke
parents:
diff changeset
76 size_t _large_pages, _small_pages;
a61af66fc99e Initial load
duke
parents:
diff changeset
77
a61af66fc99e Initial load
duke
parents:
diff changeset
78 SpaceStats() {
a61af66fc99e Initial load
duke
parents:
diff changeset
79 _local_space = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
80 _remote_space = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
81 _unbiased_space = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
82 _uncommited_space = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
83 _large_pages = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
84 _small_pages = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
85 }
a61af66fc99e Initial load
duke
parents:
diff changeset
86 };
a61af66fc99e Initial load
duke
parents:
diff changeset
87
a61af66fc99e Initial load
duke
parents:
diff changeset
88 SpaceStats _space_stats;
a61af66fc99e Initial load
duke
parents:
diff changeset
89
a61af66fc99e Initial load
duke
parents:
diff changeset
90 char* _last_page_scanned;
a61af66fc99e Initial load
duke
parents:
diff changeset
91 char* last_page_scanned() { return _last_page_scanned; }
a61af66fc99e Initial load
duke
parents:
diff changeset
92 void set_last_page_scanned(char* p) { _last_page_scanned = p; }
a61af66fc99e Initial load
duke
parents:
diff changeset
93 public:
535
4e400c36026f 6783381: NUMA allocator: don't pretouch eden space with UseNUMA
iveresov
parents: 373
diff changeset
94 LGRPSpace(int l, size_t alignment) : _lgrp_id(l), _last_page_scanned(NULL), _allocation_failed(false) {
4e400c36026f 6783381: NUMA allocator: don't pretouch eden space with UseNUMA
iveresov
parents: 373
diff changeset
95 _space = new MutableSpace(alignment);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
96 _alloc_rate = new AdaptiveWeightedAverage(NUMAChunkResizeWeight);
a61af66fc99e Initial load
duke
parents:
diff changeset
97 }
a61af66fc99e Initial load
duke
parents:
diff changeset
98 ~LGRPSpace() {
a61af66fc99e Initial load
duke
parents:
diff changeset
99 delete _space;
a61af66fc99e Initial load
duke
parents:
diff changeset
100 delete _alloc_rate;
a61af66fc99e Initial load
duke
parents:
diff changeset
101 }
a61af66fc99e Initial load
duke
parents:
diff changeset
102
a61af66fc99e Initial load
duke
parents:
diff changeset
103 void add_invalid_region(MemRegion r) {
a61af66fc99e Initial load
duke
parents:
diff changeset
104 if (!_invalid_region.is_empty()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
105 _invalid_region.set_start(MIN2(_invalid_region.start(), r.start()));
a61af66fc99e Initial load
duke
parents:
diff changeset
106 _invalid_region.set_end(MAX2(_invalid_region.end(), r.end()));
a61af66fc99e Initial load
duke
parents:
diff changeset
107 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
108 _invalid_region = r;
a61af66fc99e Initial load
duke
parents:
diff changeset
109 }
a61af66fc99e Initial load
duke
parents:
diff changeset
110 }
a61af66fc99e Initial load
duke
parents:
diff changeset
111
a61af66fc99e Initial load
duke
parents:
diff changeset
112 static bool equals(void* lgrp_id_value, LGRPSpace* p) {
a61af66fc99e Initial load
duke
parents:
diff changeset
113 return *(int*)lgrp_id_value == p->lgrp_id();
a61af66fc99e Initial load
duke
parents:
diff changeset
114 }
a61af66fc99e Initial load
duke
parents:
diff changeset
115
373
06df86c2ec37 6740923: NUMA allocator: Ensure the progress of adaptive chunk resizing
iveresov
parents: 269
diff changeset
116 // Report a failed allocation.
06df86c2ec37 6740923: NUMA allocator: Ensure the progress of adaptive chunk resizing
iveresov
parents: 269
diff changeset
117 void set_allocation_failed() { _allocation_failed = true; }
06df86c2ec37 6740923: NUMA allocator: Ensure the progress of adaptive chunk resizing
iveresov
parents: 269
diff changeset
118
0
a61af66fc99e Initial load
duke
parents:
diff changeset
119 void sample() {
373
06df86c2ec37 6740923: NUMA allocator: Ensure the progress of adaptive chunk resizing
iveresov
parents: 269
diff changeset
120 // If there was a failed allocation make allocation rate equal
06df86c2ec37 6740923: NUMA allocator: Ensure the progress of adaptive chunk resizing
iveresov
parents: 269
diff changeset
121 // to the size of the whole chunk. This ensures the progress of
06df86c2ec37 6740923: NUMA allocator: Ensure the progress of adaptive chunk resizing
iveresov
parents: 269
diff changeset
122 // the adaptation process.
06df86c2ec37 6740923: NUMA allocator: Ensure the progress of adaptive chunk resizing
iveresov
parents: 269
diff changeset
123 size_t alloc_rate_sample;
06df86c2ec37 6740923: NUMA allocator: Ensure the progress of adaptive chunk resizing
iveresov
parents: 269
diff changeset
124 if (_allocation_failed) {
06df86c2ec37 6740923: NUMA allocator: Ensure the progress of adaptive chunk resizing
iveresov
parents: 269
diff changeset
125 alloc_rate_sample = space()->capacity_in_bytes();
06df86c2ec37 6740923: NUMA allocator: Ensure the progress of adaptive chunk resizing
iveresov
parents: 269
diff changeset
126 _allocation_failed = false;
06df86c2ec37 6740923: NUMA allocator: Ensure the progress of adaptive chunk resizing
iveresov
parents: 269
diff changeset
127 } else {
06df86c2ec37 6740923: NUMA allocator: Ensure the progress of adaptive chunk resizing
iveresov
parents: 269
diff changeset
128 alloc_rate_sample = space()->used_in_bytes();
06df86c2ec37 6740923: NUMA allocator: Ensure the progress of adaptive chunk resizing
iveresov
parents: 269
diff changeset
129 }
06df86c2ec37 6740923: NUMA allocator: Ensure the progress of adaptive chunk resizing
iveresov
parents: 269
diff changeset
130 alloc_rate()->sample(alloc_rate_sample);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
131 }
a61af66fc99e Initial load
duke
parents:
diff changeset
132
a61af66fc99e Initial load
duke
parents:
diff changeset
133 MemRegion invalid_region() const { return _invalid_region; }
a61af66fc99e Initial load
duke
parents:
diff changeset
134 void set_invalid_region(MemRegion r) { _invalid_region = r; }
a61af66fc99e Initial load
duke
parents:
diff changeset
135 int lgrp_id() const { return _lgrp_id; }
a61af66fc99e Initial load
duke
parents:
diff changeset
136 MutableSpace* space() const { return _space; }
a61af66fc99e Initial load
duke
parents:
diff changeset
137 AdaptiveWeightedAverage* alloc_rate() const { return _alloc_rate; }
268
d6340ab4105b 6723228: NUMA allocator: assert(lgrp_id != -1, "No lgrp_id set")
iveresov
parents: 263
diff changeset
138 void clear_alloc_rate() { _alloc_rate->clear(); }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
139 SpaceStats* space_stats() { return &_space_stats; }
a61af66fc99e Initial load
duke
parents:
diff changeset
140 void clear_space_stats() { _space_stats = SpaceStats(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
141
a61af66fc99e Initial load
duke
parents:
diff changeset
142 void accumulate_statistics(size_t page_size);
a61af66fc99e Initial load
duke
parents:
diff changeset
143 void scan_pages(size_t page_size, size_t page_count);
a61af66fc99e Initial load
duke
parents:
diff changeset
144 };
a61af66fc99e Initial load
duke
parents:
diff changeset
145
a61af66fc99e Initial load
duke
parents:
diff changeset
146 GrowableArray<LGRPSpace*>* _lgrp_spaces;
a61af66fc99e Initial load
duke
parents:
diff changeset
147 size_t _page_size;
a61af66fc99e Initial load
duke
parents:
diff changeset
148 unsigned _adaptation_cycles, _samples_count;
a61af66fc99e Initial load
duke
parents:
diff changeset
149
a61af66fc99e Initial load
duke
parents:
diff changeset
150 void set_page_size(size_t psz) { _page_size = psz; }
a61af66fc99e Initial load
duke
parents:
diff changeset
151 size_t page_size() const { return _page_size; }
a61af66fc99e Initial load
duke
parents:
diff changeset
152
a61af66fc99e Initial load
duke
parents:
diff changeset
153 unsigned adaptation_cycles() { return _adaptation_cycles; }
a61af66fc99e Initial load
duke
parents:
diff changeset
154 void set_adaptation_cycles(int v) { _adaptation_cycles = v; }
a61af66fc99e Initial load
duke
parents:
diff changeset
155
a61af66fc99e Initial load
duke
parents:
diff changeset
156 unsigned samples_count() { return _samples_count; }
a61af66fc99e Initial load
duke
parents:
diff changeset
157 void increment_samples_count() { ++_samples_count; }
a61af66fc99e Initial load
duke
parents:
diff changeset
158
a61af66fc99e Initial load
duke
parents:
diff changeset
159 size_t _base_space_size;
a61af66fc99e Initial load
duke
parents:
diff changeset
160 void set_base_space_size(size_t v) { _base_space_size = v; }
a61af66fc99e Initial load
duke
parents:
diff changeset
161 size_t base_space_size() const { return _base_space_size; }
a61af66fc99e Initial load
duke
parents:
diff changeset
162
a61af66fc99e Initial load
duke
parents:
diff changeset
163 // Check if the NUMA topology has changed. Add and remove spaces if needed.
a61af66fc99e Initial load
duke
parents:
diff changeset
164 // The update can be forced by setting the force parameter equal to true.
a61af66fc99e Initial load
duke
parents:
diff changeset
165 bool update_layout(bool force);
141
fcbfc50865ab 6684395: Port NUMA-aware allocator to linux
iveresov
parents: 0
diff changeset
166 // Bias region towards the lgrp.
fcbfc50865ab 6684395: Port NUMA-aware allocator to linux
iveresov
parents: 0
diff changeset
167 void bias_region(MemRegion mr, int lgrp_id);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
168 // Free pages in a given region.
a61af66fc99e Initial load
duke
parents:
diff changeset
169 void free_region(MemRegion mr);
a61af66fc99e Initial load
duke
parents:
diff changeset
170 // Get current chunk size.
a61af66fc99e Initial load
duke
parents:
diff changeset
171 size_t current_chunk_size(int i);
a61af66fc99e Initial load
duke
parents:
diff changeset
172 // Get default chunk size (equally divide the space).
a61af66fc99e Initial load
duke
parents:
diff changeset
173 size_t default_chunk_size();
a61af66fc99e Initial load
duke
parents:
diff changeset
174 // Adapt the chunk size to follow the allocation rate.
a61af66fc99e Initial load
duke
parents:
diff changeset
175 size_t adaptive_chunk_size(int i, size_t limit);
a61af66fc99e Initial load
duke
parents:
diff changeset
176 // Scan and free invalid pages.
a61af66fc99e Initial load
duke
parents:
diff changeset
177 void scan_pages(size_t page_count);
a61af66fc99e Initial load
duke
parents:
diff changeset
178 // Return the bottom_region and the top_region. Align them to page_size() boundary.
a61af66fc99e Initial load
duke
parents:
diff changeset
179 // |------------------new_region---------------------------------|
a61af66fc99e Initial load
duke
parents:
diff changeset
180 // |----bottom_region--|---intersection---|------top_region------|
a61af66fc99e Initial load
duke
parents:
diff changeset
181 void select_tails(MemRegion new_region, MemRegion intersection,
a61af66fc99e Initial load
duke
parents:
diff changeset
182 MemRegion* bottom_region, MemRegion *top_region);
a61af66fc99e Initial load
duke
parents:
diff changeset
183 // Try to merge the invalid region with the bottom or top region by decreasing
a61af66fc99e Initial load
duke
parents:
diff changeset
184 // the intersection area. Return the invalid_region aligned to the page_size()
a61af66fc99e Initial load
duke
parents:
diff changeset
185 // boundary if it's inside the intersection. Return non-empty invalid_region
a61af66fc99e Initial load
duke
parents:
diff changeset
186 // if it lies inside the intersection (also page-aligned).
a61af66fc99e Initial load
duke
parents:
diff changeset
187 // |------------------new_region---------------------------------|
a61af66fc99e Initial load
duke
parents:
diff changeset
188 // |----------------|-------invalid---|--------------------------|
a61af66fc99e Initial load
duke
parents:
diff changeset
189 // |----bottom_region--|---intersection---|------top_region------|
a61af66fc99e Initial load
duke
parents:
diff changeset
190 void merge_regions(MemRegion new_region, MemRegion* intersection,
a61af66fc99e Initial load
duke
parents:
diff changeset
191 MemRegion *invalid_region);
a61af66fc99e Initial load
duke
parents:
diff changeset
192
a61af66fc99e Initial load
duke
parents:
diff changeset
193 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
194 GrowableArray<LGRPSpace*>* lgrp_spaces() const { return _lgrp_spaces; }
535
4e400c36026f 6783381: NUMA allocator: don't pretouch eden space with UseNUMA
iveresov
parents: 373
diff changeset
195 MutableNUMASpace(size_t alignment);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
196 virtual ~MutableNUMASpace();
a61af66fc99e Initial load
duke
parents:
diff changeset
197 // Space initialization.
535
4e400c36026f 6783381: NUMA allocator: don't pretouch eden space with UseNUMA
iveresov
parents: 373
diff changeset
198 virtual void initialize(MemRegion mr, bool clear_space, bool mangle_space, bool setup_pages = SetupPages);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
199 // Update space layout if necessary. Do all adaptive resizing job.
a61af66fc99e Initial load
duke
parents:
diff changeset
200 virtual void update();
a61af66fc99e Initial load
duke
parents:
diff changeset
201 // Update allocation rate averages.
a61af66fc99e Initial load
duke
parents:
diff changeset
202 virtual void accumulate_statistics();
a61af66fc99e Initial load
duke
parents:
diff changeset
203
263
12eea04c8b06 6672698: mangle_unused_area() should not remangle the entire heap at each collection.
jmasa
parents: 190
diff changeset
204 virtual void clear(bool mangle_space);
12eea04c8b06 6672698: mangle_unused_area() should not remangle the entire heap at each collection.
jmasa
parents: 190
diff changeset
205 virtual void mangle_unused_area() PRODUCT_RETURN;
12eea04c8b06 6672698: mangle_unused_area() should not remangle the entire heap at each collection.
jmasa
parents: 190
diff changeset
206 virtual void mangle_unused_area_complete() PRODUCT_RETURN;
12eea04c8b06 6672698: mangle_unused_area() should not remangle the entire heap at each collection.
jmasa
parents: 190
diff changeset
207 virtual void mangle_region(MemRegion mr) PRODUCT_RETURN;
12eea04c8b06 6672698: mangle_unused_area() should not remangle the entire heap at each collection.
jmasa
parents: 190
diff changeset
208 virtual void check_mangled_unused_area(HeapWord* limit) PRODUCT_RETURN;
12eea04c8b06 6672698: mangle_unused_area() should not remangle the entire heap at each collection.
jmasa
parents: 190
diff changeset
209 virtual void check_mangled_unused_area_complete() PRODUCT_RETURN;
12eea04c8b06 6672698: mangle_unused_area() should not remangle the entire heap at each collection.
jmasa
parents: 190
diff changeset
210 virtual void set_top_for_allocations(HeapWord* v) PRODUCT_RETURN;
12eea04c8b06 6672698: mangle_unused_area() should not remangle the entire heap at each collection.
jmasa
parents: 190
diff changeset
211 virtual void set_top_for_allocations() PRODUCT_RETURN;
12eea04c8b06 6672698: mangle_unused_area() should not remangle the entire heap at each collection.
jmasa
parents: 190
diff changeset
212
0
a61af66fc99e Initial load
duke
parents:
diff changeset
213 virtual void ensure_parsability();
a61af66fc99e Initial load
duke
parents:
diff changeset
214 virtual size_t used_in_words() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
215 virtual size_t free_in_words() const;
373
06df86c2ec37 6740923: NUMA allocator: Ensure the progress of adaptive chunk resizing
iveresov
parents: 269
diff changeset
216
06df86c2ec37 6740923: NUMA allocator: Ensure the progress of adaptive chunk resizing
iveresov
parents: 269
diff changeset
217 using MutableSpace::capacity_in_words;
06df86c2ec37 6740923: NUMA allocator: Ensure the progress of adaptive chunk resizing
iveresov
parents: 269
diff changeset
218 virtual size_t capacity_in_words(Thread* thr) const;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
219 virtual size_t tlab_capacity(Thread* thr) const;
a61af66fc99e Initial load
duke
parents:
diff changeset
220 virtual size_t unsafe_max_tlab_alloc(Thread* thr) const;
a61af66fc99e Initial load
duke
parents:
diff changeset
221
a61af66fc99e Initial load
duke
parents:
diff changeset
222 // Allocation (return NULL if full)
a61af66fc99e Initial load
duke
parents:
diff changeset
223 virtual HeapWord* allocate(size_t word_size);
a61af66fc99e Initial load
duke
parents:
diff changeset
224 virtual HeapWord* cas_allocate(size_t word_size);
a61af66fc99e Initial load
duke
parents:
diff changeset
225
a61af66fc99e Initial load
duke
parents:
diff changeset
226 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
227 virtual void print_on(outputStream* st) const;
a61af66fc99e Initial load
duke
parents:
diff changeset
228 virtual void print_short_on(outputStream* st) const;
6008
b632e80fc9dc 4988100: oop_verify_old_oop appears to be dead
brutisso
parents: 1972
diff changeset
229 virtual void verify();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
230
a61af66fc99e Initial load
duke
parents:
diff changeset
231 virtual void set_top(HeapWord* value);
a61af66fc99e Initial load
duke
parents:
diff changeset
232 };
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
233
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
234 #endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_MUTABLENUMASPACE_HPP