os::realign_memory(char *addr, size_t bytes, size_t alignment_hint)

  • 引数で渡されたアドレス範囲がHugePage上に割り当てられている事をカーネルに伝える
    • 1ページは通常は4KBであるが、HugaPageは2MB
//Linux版(jdk7/hotspot/src/os/linux/vm/os_linux.cpp)
void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) {
  if (UseHugeTLBFS && alignment_hint > (size_t)vm_page_size()) {
    // We don't check the return value: madvise(MADV_HUGEPAGE) may not
    // be supported or the memory may already be backed by huge pages.

    //glibcのmadviseを呼び出す
    //詳細 -> http://linuxjm.sourceforge.jp/html/LDP_man-pages/man2/madvise.2.html
    ::madvise(addr, bytes, MADV_HUGEPAGE);
  }
}