< prev index next >

src/share/vm/memory/virtualspace.cpp

Print this page
rev 8978 : imported patch remove_err_msg


 120   if (size == 0) {
 121     return;
 122   }
 123 
 124   // If OS doesn't support demand paging for large page memory, we need
 125   // to use reserve_memory_special() to reserve and pin the entire region.
 126   bool special = large && !os::can_commit_large_page_memory();
 127   char* base = NULL;
 128 
 129   if (special) {
 130 
 131     base = os::reserve_memory_special(size, alignment, requested_address, executable);
 132 
 133     if (base != NULL) {
 134       if (failed_to_reserve_as_requested(base, requested_address, size, true)) {
 135         // OS ignored requested address. Try different address.
 136         return;
 137       }
 138       // Check alignment constraints.
 139       assert((uintptr_t) base % alignment == 0,
 140              err_msg("Large pages returned a non-aligned address, base: "
 141                  PTR_FORMAT " alignment: " PTR_FORMAT,
 142                  base, (void*)(uintptr_t)alignment));
 143       _special = true;
 144     } else {
 145       // failed; try to reserve regular memory below
 146       if (UseLargePages && (!FLAG_IS_DEFAULT(UseLargePages) ||
 147                             !FLAG_IS_DEFAULT(LargePageSizeInBytes))) {
 148         if (PrintCompressedOopsMode) {
 149           tty->cr();
 150           tty->print_cr("Reserve regular memory without large pages.");
 151         }
 152       }
 153     }
 154   }
 155 
 156   if (base == NULL) {
 157     // Optimistically assume that the OSes returns an aligned base pointer.
 158     // When reserving a large address range, most OSes seem to align to at
 159     // least 64K.
 160 
 161     // If the memory was requested at a particular address, use
 162     // os::attempt_reserve_memory_at() to avoid over mapping something


 317     // We tried before, but we didn't like the address delivered.
 318     release();
 319   }
 320 
 321   // If OS doesn't support demand paging for large page memory, we need
 322   // to use reserve_memory_special() to reserve and pin the entire region.
 323   bool special = large && !os::can_commit_large_page_memory();
 324   char* base = NULL;
 325 
 326   if (PrintCompressedOopsMode && Verbose) {
 327     tty->print("Trying to allocate at address " PTR_FORMAT " heap of size " PTR_FORMAT ".\n",
 328                requested_address, (address)size);
 329   }
 330 
 331   if (special) {
 332     base = os::reserve_memory_special(size, alignment, requested_address, false);
 333 
 334     if (base != NULL) {
 335       // Check alignment constraints.
 336       assert((uintptr_t) base % alignment == 0,
 337              err_msg("Large pages returned a non-aligned address, base: "
 338                      PTR_FORMAT " alignment: " PTR_FORMAT,
 339                      base, (void*)(uintptr_t)alignment));
 340       _special = true;
 341     }
 342   }
 343 
 344   if (base == NULL) {
 345     // Failed; try to reserve regular memory below
 346     if (UseLargePages && (!FLAG_IS_DEFAULT(UseLargePages) ||
 347                           !FLAG_IS_DEFAULT(LargePageSizeInBytes))) {
 348       if (PrintCompressedOopsMode) {
 349         tty->cr();
 350         tty->print_cr("Reserve regular memory without large pages.");
 351       }
 352     }
 353 
 354     // Optimistically assume that the OSes returns an aligned base pointer.
 355     // When reserving a large address range, most OSes seem to align to at
 356     // least 64K.
 357 
 358     // If the memory was requested at a particular address, use
 359     // os::attempt_reserve_memory_at() to avoid over mapping something


1190       test_reserved_space3(lp * 3, lp    , true);
1191       test_reserved_space3(lp * 2, lp * 2, true);
1192       test_reserved_space3(lp * 4, lp * 2, true);
1193       test_reserved_space3(lp * 8, lp * 2, true);
1194     }
1195   }
1196 
1197   static void test_reserved_space() {
1198     test_reserved_space1();
1199     test_reserved_space2();
1200     test_reserved_space3();
1201   }
1202 };
1203 
1204 void TestReservedSpace_test() {
1205   TestReservedSpace::test_reserved_space();
1206 }
1207 
1208 #define assert_equals(actual, expected)     \
1209   assert(actual == expected,                \
1210     err_msg("Got " SIZE_FORMAT " expected " \
1211       SIZE_FORMAT, actual, expected));
1212 
1213 #define assert_ge(value1, value2)                  \
1214   assert(value1 >= value2,                         \
1215     err_msg("'" #value1 "': " SIZE_FORMAT " '"     \
1216       #value2 "': " SIZE_FORMAT, value1, value2));
1217 
1218 #define assert_lt(value1, value2)                  \
1219   assert(value1 < value2,                          \
1220     err_msg("'" #value1 "': " SIZE_FORMAT " '"     \
1221       #value2 "': " SIZE_FORMAT, value1, value2));
1222 
1223 
1224 class TestVirtualSpace : AllStatic {
1225   enum TestLargePages {
1226     Default,
1227     Disable,
1228     Reserve,
1229     Commit
1230   };
1231 
1232   static ReservedSpace reserve_memory(size_t reserve_size_aligned, TestLargePages mode) {
1233     switch(mode) {
1234     default:
1235     case Default:
1236     case Reserve:
1237       return ReservedSpace(reserve_size_aligned);
1238     case Disable:
1239     case Commit:
1240       return ReservedSpace(reserve_size_aligned,
1241                            os::vm_allocation_granularity(),




 120   if (size == 0) {
 121     return;
 122   }
 123 
 124   // If OS doesn't support demand paging for large page memory, we need
 125   // to use reserve_memory_special() to reserve and pin the entire region.
 126   bool special = large && !os::can_commit_large_page_memory();
 127   char* base = NULL;
 128 
 129   if (special) {
 130 
 131     base = os::reserve_memory_special(size, alignment, requested_address, executable);
 132 
 133     if (base != NULL) {
 134       if (failed_to_reserve_as_requested(base, requested_address, size, true)) {
 135         // OS ignored requested address. Try different address.
 136         return;
 137       }
 138       // Check alignment constraints.
 139       assert((uintptr_t) base % alignment == 0,
 140              "Large pages returned a non-aligned address, base: "
 141              PTR_FORMAT " alignment: " PTR_FORMAT,
 142              base, (void*)(uintptr_t)alignment);
 143       _special = true;
 144     } else {
 145       // failed; try to reserve regular memory below
 146       if (UseLargePages && (!FLAG_IS_DEFAULT(UseLargePages) ||
 147                             !FLAG_IS_DEFAULT(LargePageSizeInBytes))) {
 148         if (PrintCompressedOopsMode) {
 149           tty->cr();
 150           tty->print_cr("Reserve regular memory without large pages.");
 151         }
 152       }
 153     }
 154   }
 155 
 156   if (base == NULL) {
 157     // Optimistically assume that the OSes returns an aligned base pointer.
 158     // When reserving a large address range, most OSes seem to align to at
 159     // least 64K.
 160 
 161     // If the memory was requested at a particular address, use
 162     // os::attempt_reserve_memory_at() to avoid over mapping something


 317     // We tried before, but we didn't like the address delivered.
 318     release();
 319   }
 320 
 321   // If OS doesn't support demand paging for large page memory, we need
 322   // to use reserve_memory_special() to reserve and pin the entire region.
 323   bool special = large && !os::can_commit_large_page_memory();
 324   char* base = NULL;
 325 
 326   if (PrintCompressedOopsMode && Verbose) {
 327     tty->print("Trying to allocate at address " PTR_FORMAT " heap of size " PTR_FORMAT ".\n",
 328                requested_address, (address)size);
 329   }
 330 
 331   if (special) {
 332     base = os::reserve_memory_special(size, alignment, requested_address, false);
 333 
 334     if (base != NULL) {
 335       // Check alignment constraints.
 336       assert((uintptr_t) base % alignment == 0,
 337              "Large pages returned a non-aligned address, base: "
 338              PTR_FORMAT " alignment: " PTR_FORMAT,
 339              base, (void*)(uintptr_t)alignment);
 340       _special = true;
 341     }
 342   }
 343 
 344   if (base == NULL) {
 345     // Failed; try to reserve regular memory below
 346     if (UseLargePages && (!FLAG_IS_DEFAULT(UseLargePages) ||
 347                           !FLAG_IS_DEFAULT(LargePageSizeInBytes))) {
 348       if (PrintCompressedOopsMode) {
 349         tty->cr();
 350         tty->print_cr("Reserve regular memory without large pages.");
 351       }
 352     }
 353 
 354     // Optimistically assume that the OSes returns an aligned base pointer.
 355     // When reserving a large address range, most OSes seem to align to at
 356     // least 64K.
 357 
 358     // If the memory was requested at a particular address, use
 359     // os::attempt_reserve_memory_at() to avoid over mapping something


1190       test_reserved_space3(lp * 3, lp    , true);
1191       test_reserved_space3(lp * 2, lp * 2, true);
1192       test_reserved_space3(lp * 4, lp * 2, true);
1193       test_reserved_space3(lp * 8, lp * 2, true);
1194     }
1195   }
1196 
1197   static void test_reserved_space() {
1198     test_reserved_space1();
1199     test_reserved_space2();
1200     test_reserved_space3();
1201   }
1202 };
1203 
1204 void TestReservedSpace_test() {
1205   TestReservedSpace::test_reserved_space();
1206 }
1207 
1208 #define assert_equals(actual, expected)  \
1209   assert(actual == expected,             \
1210          "Got " SIZE_FORMAT " expected " \
1211          SIZE_FORMAT, actual, expected);
1212 
1213 #define assert_ge(value1, value2)                  \
1214   assert(value1 >= value2,                         \
1215          "'" #value1 "': " SIZE_FORMAT " '"        \
1216          #value2 "': " SIZE_FORMAT, value1, value2);
1217 
1218 #define assert_lt(value1, value2)                  \
1219   assert(value1 < value2,                          \
1220          "'" #value1 "': " SIZE_FORMAT " '"        \
1221          #value2 "': " SIZE_FORMAT, value1, value2);
1222 
1223 
1224 class TestVirtualSpace : AllStatic {
1225   enum TestLargePages {
1226     Default,
1227     Disable,
1228     Reserve,
1229     Commit
1230   };
1231 
1232   static ReservedSpace reserve_memory(size_t reserve_size_aligned, TestLargePages mode) {
1233     switch(mode) {
1234     default:
1235     case Default:
1236     case Reserve:
1237       return ReservedSpace(reserve_size_aligned);
1238     case Disable:
1239     case Commit:
1240       return ReservedSpace(reserve_size_aligned,
1241                            os::vm_allocation_granularity(),


< prev index next >