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 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #include "precompiled.hpp"
26 #include "gc_implementation/g1/heapRegion.hpp"
27 #include "gc_implementation/g1/heapRegionManager.inline.hpp"
28 #include "gc_implementation/g1/heapRegionSet.inline.hpp"
29 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
30 #include "gc_implementation/g1/concurrentG1Refine.hpp"
31 #include "memory/allocation.hpp"
32
33 void HeapRegionManager::initialize(G1RegionToSpaceMapper* heap_storage,
34 G1RegionToSpaceMapper* prev_bitmap,
35 G1RegionToSpaceMapper* next_bitmap,
36 G1RegionToSpaceMapper* bot,
37 G1RegionToSpaceMapper* cardtable,
38 G1RegionToSpaceMapper* card_counts) {
39 _allocated_heapregions_length = 0;
40
41 _heap_mapper = heap_storage;
42
43 _prev_bitmap_mapper = prev_bitmap;
44 _next_bitmap_mapper = next_bitmap;
45
46 _bot_mapper = bot;
53
54 _available_map.resize(_regions.length(), false);
55 _available_map.clear();
56 }
57
58 bool HeapRegionManager::is_available(uint region) const {
59 return _available_map.at(region);
60 }
61
62 #ifdef ASSERT
63 bool HeapRegionManager::is_free(HeapRegion* hr) const {
64 return _free_list.contains(hr);
65 }
66 #endif
67
68 HeapRegion* HeapRegionManager::new_heap_region(uint hrm_index) {
69 G1CollectedHeap* g1h = G1CollectedHeap::heap();
70 HeapWord* bottom = g1h->bottom_addr_for_region(hrm_index);
71 MemRegion mr(bottom, bottom + HeapRegion::GrainWords);
72 assert(reserved().contains(mr), "invariant");
73 return g1h->allocator()->new_heap_region(hrm_index, g1h->bot_shared(), mr);
74 }
75
76 void HeapRegionManager::commit_regions(uint index, size_t num_regions) {
77 guarantee(num_regions > 0, "Must commit more than zero regions");
78 guarantee(_num_committed + num_regions <= max_length(), "Cannot commit more than the maximum amount of regions");
79
80 _num_committed += (uint)num_regions;
81
82 _heap_mapper->commit_regions(index, num_regions);
83
84 // Also commit auxiliary data
85 _prev_bitmap_mapper->commit_regions(index, num_regions);
86 _next_bitmap_mapper->commit_regions(index, num_regions);
87
88 _bot_mapper->commit_regions(index, num_regions);
89 _cardtable_mapper->commit_regions(index, num_regions);
90
91 _card_counts_mapper->commit_regions(index, num_regions);
92 }
93
|
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 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #include "precompiled.hpp"
26 #include "gc_implementation/g1/heapRegion.inline.hpp"
27 #include "gc_implementation/g1/heapRegionManager.inline.hpp"
28 #include "gc_implementation/g1/heapRegionSet.inline.hpp"
29 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
30 #include "gc_implementation/g1/concurrentG1Refine.hpp"
31 #include "memory/allocation.hpp"
32
33 void HeapRegionManager::initialize(G1RegionToSpaceMapper* heap_storage,
34 G1RegionToSpaceMapper* prev_bitmap,
35 G1RegionToSpaceMapper* next_bitmap,
36 G1RegionToSpaceMapper* bot,
37 G1RegionToSpaceMapper* cardtable,
38 G1RegionToSpaceMapper* card_counts) {
39 _allocated_heapregions_length = 0;
40
41 _heap_mapper = heap_storage;
42
43 _prev_bitmap_mapper = prev_bitmap;
44 _next_bitmap_mapper = next_bitmap;
45
46 _bot_mapper = bot;
53
54 _available_map.resize(_regions.length(), false);
55 _available_map.clear();
56 }
57
58 bool HeapRegionManager::is_available(uint region) const {
59 return _available_map.at(region);
60 }
61
62 #ifdef ASSERT
63 bool HeapRegionManager::is_free(HeapRegion* hr) const {
64 return _free_list.contains(hr);
65 }
66 #endif
67
68 HeapRegion* HeapRegionManager::new_heap_region(uint hrm_index) {
69 G1CollectedHeap* g1h = G1CollectedHeap::heap();
70 HeapWord* bottom = g1h->bottom_addr_for_region(hrm_index);
71 MemRegion mr(bottom, bottom + HeapRegion::GrainWords);
72 assert(reserved().contains(mr), "invariant");
73 return g1h->new_heap_region(hrm_index, mr);
74 }
75
76 void HeapRegionManager::commit_regions(uint index, size_t num_regions) {
77 guarantee(num_regions > 0, "Must commit more than zero regions");
78 guarantee(_num_committed + num_regions <= max_length(), "Cannot commit more than the maximum amount of regions");
79
80 _num_committed += (uint)num_regions;
81
82 _heap_mapper->commit_regions(index, num_regions);
83
84 // Also commit auxiliary data
85 _prev_bitmap_mapper->commit_regions(index, num_regions);
86 _next_bitmap_mapper->commit_regions(index, num_regions);
87
88 _bot_mapper->commit_regions(index, num_regions);
89 _cardtable_mapper->commit_regions(index, num_regions);
90
91 _card_counts_mapper->commit_regions(index, num_regions);
92 }
93
|