# HG changeset patch # User goetz # Date 1422475155 -3600 # Node ID 221d6229668c7dc221dc61ac82b7268143ffa377 # Parent b59d6dde575bdfa29eb6a7b2fcd5812717270995 8071822: [TEST_BUG] Adapt collectorPolicy internal tests to support 64K pages diff --git a/src/share/vm/memory/collectorPolicy.cpp b/src/share/vm/memory/collectorPolicy.cpp --- a/src/share/vm/memory/collectorPolicy.cpp +++ b/src/share/vm/memory/collectorPolicy.cpp @@ -965,32 +965,43 @@ } static void test_old_size() { - size_t flag_value; + size_t flag_value; - save_flags(); + save_flags(); - // If OldSize is set on the command line, it should be used - // for both min and initial old size if less than min heap. - flag_value = 20 * M; - set_basic_flag_values(); - FLAG_SET_CMDLINE(uintx, OldSize, flag_value); - verify_old_min(flag_value); + // If OldSize is set on the command line, it should be used + // for both min and initial old size if less than min heap. + flag_value = 20 * M; + set_basic_flag_values(); + FLAG_SET_CMDLINE(uintx, OldSize, flag_value); + verify_old_min(flag_value); - set_basic_flag_values(); - FLAG_SET_CMDLINE(uintx, OldSize, flag_value); - verify_old_initial(flag_value); + // In case of large alignment due to 64K page size, some sizes are + // increased. Remember the result from verify_old_min for the + // next test. + size_t adapted_MaxHeapSize = MaxHeapSize; + size_t adapted_InitialHeapSize = InitialHeapSize; - // If MaxNewSize is large, the maximum OldSize will be less than - // what's requested on the command line and it should be reset - // ergonomically. - flag_value = 30 * M; - set_basic_flag_values(); - FLAG_SET_CMDLINE(uintx, OldSize, flag_value); - FLAG_SET_CMDLINE(uintx, MaxNewSize, 170*M); - // Calculate what we expect the flag to be. - flag_value = MaxHeapSize - MaxNewSize; - verify_old_initial(flag_value); + set_basic_flag_values(); + FLAG_SET_CMDLINE(uintx, OldSize, flag_value); + // Calculate what we expect the flag to be. + flag_value = adapted_InitialHeapSize - MaxNewSize; + verify_old_initial(flag_value); + // If MaxNewSize is large, the maximum OldSize will be less than + // what's requested on the command line and it should be reset + // ergonomically. + // We intentionally set MaxNewSize + OldSize > MaxHeapSize. + set_basic_flag_values(); + flag_value = 30 * M; + FLAG_SET_CMDLINE(uintx, OldSize, flag_value); + size_t new_size_value = adapted_MaxHeapSize - flag_value + 20*M; + FLAG_SET_CMDLINE(uintx, MaxNewSize, new_size_value); + // Calculate what we expect the flag to be. + flag_value = adapted_MaxHeapSize - MaxNewSize; + verify_old_initial(flag_value); + + restore_flags(); } static void verify_young_min(size_t expected) { @@ -1011,6 +1022,12 @@ MarkSweepPolicy msp; msp.initialize_all(); + if (InitialHeapSize > initial_heap_size) { + // InitialHeapSize was adapted by msp.initialize_all, e.g. due to alignment + // caused by 64K page size. + initial_heap_size = InitialHeapSize; + } + size_t expected = msp.scale_by_NewRatio_aligned(initial_heap_size); assert(msp.initial_young_size() == expected, err_msg("%zu != %zu", msp.initial_young_size(), expected)); assert(FLAG_IS_ERGO(NewSize) && NewSize == expected,