JVM 大页面支持:大页面大于堆是否浪费内存?

JVM large pages support: is memory wasted if large pages is larger than heap?

我刚刚找到一个 JVM 配置,其中配置的大页面的大小比为 JVM 分配的堆大小大得多。

我在下面添加的配置是针对 Websphere Application Server 的,但问题对于使用大页面的任何其他 Java 应用程序都是一样的。 通常使用 -Xlp (IBM Knowledge Center- Tuning Linux systems) switch and for Oracle using -XX:+UseLargePages (Oracle: Java Support for Large Memory Pages)

为 IBM JRE 启用大页面

当前配置显示

vm.nr_hugepages = 4096 
Hugepagesize: 2048 kB (from meminfo)
-Xmx 6144 (for java process)

并且 JVM 启动时启用了 -Xlp。

我假设到 vm.nr_hugepages 8GB 已固定,因此其他进程无法使用。 但是 Java 只会为堆申请 6GB。

谁能解释一下其他 2GB 发生了什么?

提前致谢!

剩余的 2GB 大页面被固定在连续的实际内存中,等待应用程序使用它们(JVM 配置本身不会增长足够大的堆来使用剩余的大页面)。除了潜在的调用者之外,该内存无法用于任何其他内容。

Huge pages kernel options

hugepages

Defines the number of persistent huge pages configured in the kernel at boot time. The default value is 0. It is only possible to allocate (or deallocate) huge pages if there are sufficient physically contiguous free pages in the system. Pages reserved by this parameter cannot be used for other purposes.

在以后的 Linux 版本中有一个“透明大页面”选项,它试图通过将不知情的应用程序移动到可能存在的任何 slack space 中来解决其中的一些问题,但是好像得不到多少爱