src/hotspot/share/memory/virtualspace.cpp
changeset 52396 e292e94b448a
parent 51557 0369fe9ae26f
child 53547 9d1a788dea3d
equal deleted inserted replaced
52395:5ca10e4e052c 52396:e292e94b448a
  1057 
  1057 
  1058 /////////////// Unit tests ///////////////
  1058 /////////////// Unit tests ///////////////
  1059 
  1059 
  1060 #ifndef PRODUCT
  1060 #ifndef PRODUCT
  1061 
  1061 
  1062 #define test_log(...) \
       
  1063   do {\
       
  1064     if (VerboseInternalVMTests) { \
       
  1065       tty->print_cr(__VA_ARGS__); \
       
  1066       tty->flush(); \
       
  1067     }\
       
  1068   } while (false)
       
  1069 
       
  1070 class TestReservedSpace : AllStatic {
  1062 class TestReservedSpace : AllStatic {
  1071  public:
  1063  public:
  1072   static void small_page_write(void* addr, size_t size) {
  1064   static void small_page_write(void* addr, size_t size) {
  1073     size_t page_size = os::vm_page_size();
  1065     size_t page_size = os::vm_page_size();
  1074 
  1066 
  1085       guarantee(os::release_memory(rs.base(), rs.size()), "Shouldn't fail");
  1077       guarantee(os::release_memory(rs.base(), rs.size()), "Shouldn't fail");
  1086     }
  1078     }
  1087   }
  1079   }
  1088 
  1080 
  1089   static void test_reserved_space1(size_t size, size_t alignment) {
  1081   static void test_reserved_space1(size_t size, size_t alignment) {
  1090     test_log("test_reserved_space1(%p)", (void*) (uintptr_t) size);
       
  1091 
       
  1092     assert(is_aligned(size, alignment), "Incorrect input parameters");
  1082     assert(is_aligned(size, alignment), "Incorrect input parameters");
  1093 
  1083 
  1094     ReservedSpace rs(size,          // size
  1084     ReservedSpace rs(size,          // size
  1095                      alignment,     // alignment
  1085                      alignment,     // alignment
  1096                      UseLargePages, // large
  1086                      UseLargePages, // large
  1097                      (char *)NULL); // requested_address
  1087                      (char *)NULL); // requested_address
  1098 
  1088 
  1099     test_log(" rs.special() == %d", rs.special());
       
  1100 
       
  1101     assert(rs.base() != NULL, "Must be");
  1089     assert(rs.base() != NULL, "Must be");
  1102     assert(rs.size() == size, "Must be");
  1090     assert(rs.size() == size, "Must be");
  1103 
  1091 
  1104     assert(is_aligned(rs.base(), alignment), "aligned sizes should always give aligned addresses");
  1092     assert(is_aligned(rs.base(), alignment), "aligned sizes should always give aligned addresses");
  1105     assert(is_aligned(rs.size(), alignment), "aligned sizes should always give aligned addresses");
  1093     assert(is_aligned(rs.size(), alignment), "aligned sizes should always give aligned addresses");
  1110 
  1098 
  1111     release_memory_for_test(rs);
  1099     release_memory_for_test(rs);
  1112   }
  1100   }
  1113 
  1101 
  1114   static void test_reserved_space2(size_t size) {
  1102   static void test_reserved_space2(size_t size) {
  1115     test_log("test_reserved_space2(%p)", (void*)(uintptr_t)size);
       
  1116 
       
  1117     assert(is_aligned(size, os::vm_allocation_granularity()), "Must be at least AG aligned");
  1103     assert(is_aligned(size, os::vm_allocation_granularity()), "Must be at least AG aligned");
  1118 
  1104 
  1119     ReservedSpace rs(size);
  1105     ReservedSpace rs(size);
  1120 
       
  1121     test_log(" rs.special() == %d", rs.special());
       
  1122 
  1106 
  1123     assert(rs.base() != NULL, "Must be");
  1107     assert(rs.base() != NULL, "Must be");
  1124     assert(rs.size() == size, "Must be");
  1108     assert(rs.size() == size, "Must be");
  1125 
  1109 
  1126     if (rs.special()) {
  1110     if (rs.special()) {
  1129 
  1113 
  1130     release_memory_for_test(rs);
  1114     release_memory_for_test(rs);
  1131   }
  1115   }
  1132 
  1116 
  1133   static void test_reserved_space3(size_t size, size_t alignment, bool maybe_large) {
  1117   static void test_reserved_space3(size_t size, size_t alignment, bool maybe_large) {
  1134     test_log("test_reserved_space3(%p, %p, %d)",
       
  1135         (void*)(uintptr_t)size, (void*)(uintptr_t)alignment, maybe_large);
       
  1136 
       
  1137     if (size < alignment) {
  1118     if (size < alignment) {
  1138       // Tests might set -XX:LargePageSizeInBytes=<small pages> and cause unexpected input arguments for this test.
  1119       // Tests might set -XX:LargePageSizeInBytes=<small pages> and cause unexpected input arguments for this test.
  1139       assert((size_t)os::vm_page_size() == os::large_page_size(), "Test needs further refinement");
  1120       assert((size_t)os::vm_page_size() == os::large_page_size(), "Test needs further refinement");
  1140       return;
  1121       return;
  1141     }
  1122     }
  1144     assert(is_aligned(size, alignment), "Must be at least aligned against alignment");
  1125     assert(is_aligned(size, alignment), "Must be at least aligned against alignment");
  1145 
  1126 
  1146     bool large = maybe_large && UseLargePages && size >= os::large_page_size();
  1127     bool large = maybe_large && UseLargePages && size >= os::large_page_size();
  1147 
  1128 
  1148     ReservedSpace rs(size, alignment, large, false);
  1129     ReservedSpace rs(size, alignment, large, false);
  1149 
       
  1150     test_log(" rs.special() == %d", rs.special());
       
  1151 
  1130 
  1152     assert(rs.base() != NULL, "Must be");
  1131     assert(rs.base() != NULL, "Must be");
  1153     assert(rs.size() == size, "Must be");
  1132     assert(rs.size() == size, "Must be");
  1154 
  1133 
  1155     if (rs.special()) {
  1134     if (rs.special()) {