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

我在下面添加的配置用于Websphere Application Server,但是对于使用大页面的任何其他Java应用程序,该问题将相同。
通常,使用-Xlp(IBM Knowledge Center- Tuning Linux systems)开关为IBM JRE启用大页面,使用-XX:+ UseLargePages(Oracle: Java Support for Large Memory Pages)为Oracle启用大页面。

当前配置显示

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


并且JVM以启用-Xlp开头。

我假设vm.nr_hugepages固定了8GB,因此无法用于其他进程。
但是Java只会为Heap要求6GB。

谁能解释其他2GB的内容吗?

提前致谢!

最佳答案

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


  大页面内核选项
  
  大页面
  
  定义在中配置的持久大页面的数量
  引导时的内核。默认值为0。仅可能
  如果有足够的空间来分配(或取消分配)大页面
  系统中物理上连续的空闲页面。保留的页面
  参数不能用于其他目的。


在更高的Linux发行版中,有一个“透明的大页面”选项试图通过将不知情的应用程序移动到可能存在的任何闲置空间中来解决其中的某些问题,但似乎并没有获得太多的关注。

关于java - JVM大页面支持:如果大页面大于堆,是否浪费了内存?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41247659/

10-11 23:19
查看更多