Print this page


Split Close
Expand all
Collapse all
          --- old/src/os/linux/vm/os_linux.cpp
          +++ new/src/os/linux/vm/os_linux.cpp
↓ open down ↓ 2523 lines elided ↑ open up ↑
2524 2524      uintptr_t res =
2525 2525        (uintptr_t) ::mmap(addr, size, prot,
2526 2526                           MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS|MAP_HUGETLB,
2527 2527                           -1, 0);
2528 2528      if (res != (uintptr_t) MAP_FAILED) {
2529 2529        if (UseNUMAInterleaving) {
2530 2530          numa_make_global(addr, size);
2531 2531        }
2532 2532        return true;
2533 2533      }
2534      -    return false;
     2534 +    // Fall through and try to use small pages
2535 2535    }
2536 2536  
2537      -  return commit_memory(addr, size, exec);
     2537 +  if (commit_memory(addr, size, exec)) {
     2538 +    realign_memory(addr, size, alignment_hint);
     2539 +    return true;
     2540 +  }
     2541 +  return false;
2538 2542  }
2539 2543  
2540 2544  void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) {
2541 2545    if (UseHugeTLBFS && alignment_hint > (size_t)vm_page_size()) {
2542 2546      // We don't check the return value: madvise(MADV_HUGEPAGE) may not
2543 2547      // be supported or the memory may already be backed by huge pages.
2544 2548      ::madvise(addr, bytes, MADV_HUGEPAGE);
2545 2549    }
2546 2550  }
2547 2551  
↓ open down ↓ 2980 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX