< prev index next >
src/hotspot/cpu/aarch64/gc/z/zGlobals_aarch64.cpp
Print this page
@@ -134,12 +134,33 @@
// |
// * 63-48 Fixed (16-bits, always zero)
//
size_t ZPlatformAddressOffsetBits() {
- const size_t min_address_offset_bits = 42; // 4TB
- const size_t max_address_offset_bits = 44; // 16TB
+ // 42 VA_BITS uses 64K pages
+ // 47 VA_BITS uses 16K pages - default mode
+ const bool is_using_42_va_bits = os::vm_page_size() == (64 * 1024);
+ const bool is_using_47_va_bits = os::vm_page_size() == (16 * 1024);
+
+ assert(is_using_42_va_bits ^ is_using_47_va_bits, "One mode should be set");
+
+ const int va_bits = is_using_42_va_bits ? 42 : 47;
+
+ // The max_address_offset_bits need to contain 5 full offsets:
+ //
+ // Remapped
+ // Gap
+ // Marked1
+ // Marked0
+ // Base
+ //
+ // Which uses 3 of the available bits
+ const size_t max_address_offset_bits = va_bits - 3;
+
+ // Don't unnecessarily overuse the virtual address space
+ const size_t min_address_offset_bits = max_address_offset_bits - 2;
+
const size_t address_offset = round_up_power_of_2(MaxHeapSize * ZVirtualToPhysicalRatio);
const size_t address_offset_bits = log2_intptr(address_offset);
return clamp(address_offset_bits, min_address_offset_bits, max_address_offset_bits);
}
< prev index next >