< prev index next >
src/hotspot/share/gc/g1/g1CollectedHeap.cpp
Print this page
rev 52577 : imported patch webrev.0
rev 52578 : imported patch webrev.1
rev 52579 : imported patch webrev.2_reserved_page_size
rev 52580 : [mq]: webrev.3
*** 1562,1590 ****
NOT_PRODUCT(reset_evacuation_should_fail();)
guarantee(_task_queues != NULL, "task_queues allocation failure.");
}
G1RegionToSpaceMapper* G1CollectedHeap::create_aux_memory_mapper(const char* description,
size_t size,
size_t translation_factor) {
size_t preferred_page_size = os::page_size_for_region_unaligned(size, 1);
// Allocate a new reserved space, preferring to use large pages.
ReservedSpace rs(size, preferred_page_size);
- size_t page_size = rs.actual_page_size();
G1RegionToSpaceMapper* result =
G1RegionToSpaceMapper::create_mapper(rs,
size,
! page_size,
HeapRegion::GrainBytes,
translation_factor,
mtGC);
os::trace_page_sizes_for_requested_size(description,
size,
preferred_page_size,
! page_size,
rs.base(),
rs.size());
return result;
}
--- 1562,1605 ----
NOT_PRODUCT(reset_evacuation_should_fail();)
guarantee(_task_queues != NULL, "task_queues allocation failure.");
}
+ static size_t actual_reserved_page_size(ReservedSpace rs) {
+ size_t page_size = os::vm_page_size();
+ if (UseLargePages) {
+ // There are two ways to manage large page memory.
+ // 1. OS supports committing large page memory.
+ // 2. OS doesn't support committing large page memory so ReservedSpace manages it.
+ // And ReservedSpace calls it 'special'. If we failed to set 'special',
+ // we reserved memory without large page.
+ if (os::can_commit_large_page_memory() || rs.special()) {
+ page_size = os::large_page_size();
+ }
+ }
+
+ return page_size;
+ }
+
G1RegionToSpaceMapper* G1CollectedHeap::create_aux_memory_mapper(const char* description,
size_t size,
size_t translation_factor) {
size_t preferred_page_size = os::page_size_for_region_unaligned(size, 1);
// Allocate a new reserved space, preferring to use large pages.
ReservedSpace rs(size, preferred_page_size);
G1RegionToSpaceMapper* result =
G1RegionToSpaceMapper::create_mapper(rs,
size,
! rs.alignment(),
HeapRegion::GrainBytes,
translation_factor,
mtGC);
os::trace_page_sizes_for_requested_size(description,
size,
preferred_page_size,
! rs.alignment(),
rs.base(),
rs.size());
return result;
}
*** 1657,1667 ****
// Create the hot card cache.
_hot_card_cache = new G1HotCardCache(this);
// Carve out the G1 part of the heap.
ReservedSpace g1_rs = heap_rs.first_part(max_byte_size);
! size_t page_size = heap_rs.actual_page_size();
G1RegionToSpaceMapper* heap_storage =
G1RegionToSpaceMapper::create_mapper(g1_rs,
g1_rs.size(),
page_size,
HeapRegion::GrainBytes,
--- 1672,1682 ----
// Create the hot card cache.
_hot_card_cache = new G1HotCardCache(this);
// Carve out the G1 part of the heap.
ReservedSpace g1_rs = heap_rs.first_part(max_byte_size);
! size_t page_size = actual_reserved_page_size(heap_rs);
G1RegionToSpaceMapper* heap_storage =
G1RegionToSpaceMapper::create_mapper(g1_rs,
g1_rs.size(),
page_size,
HeapRegion::GrainBytes,
< prev index next >