当前位置: 首页 > 知识库问答 >
问题:

JVM大页面支持:如果大页面大于堆,内存会浪费吗?

云文栋
2023-03-14

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

我在下面添加的配置是针对Websphere Application Server的,但是对于使用大页面的任何其他Java应用程序来说,问题都是一样的。一般来说,IBM JRE使用-Xlp(IBM Knowledge Center-Tuning Linux systems)开关启用大页面,Oracle使用-XX: UseLargePages (Oracle: Java对大内存页面的支持)启用大页面

当前配置显示

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

JVM 以启用 -Xlp 开始。

我假设由vm.nr_hugepages固定8GB,因此对其他进程不可用。但是Java声称堆只有6GB。

任何人都可以解释一下另一个2GB会发生什么吗?

提前致谢!

共有1个答案

颛孙航
2023-03-14

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

巨大的页面内核选项

大型页面

定义启动时在内核中配置的持久大页面的数量。默认值为0。只有当系统中有足够的物理上连续的空闲页面时,才有可能分配(或释放)巨大的页面。此参数保留的页面不能用于其他目的。

在以后的Linux版本中有一个“透明的大页面”选项,它试图通过将不知情的应用程序移动到任何可能存在的空闲空间来解决这些问题,但似乎没有得到太多的支持。

 类似资料:
  • 在Java中分配堆外内存时(例如通过直接缓冲区或JNI本机代码),如果JVM使用-XX: UseLargePages,分配的内存是否会由巨大的页面支持?

  • 我正在尝试衡量在Windows7HotSpotJVM中使用大内存页面的性能提升。为了做到这一点,我需要监视JVM内存使用情况,以确保实际使用了大型页面。不幸的是,我无法找到实现这一目标的途径。下面是我所做的设置和测试的描述: 环境设置 我正在使用64位Windows 7终极版进行测试。“将页面锁定在内存中”Windows安全策略已启用,如Java支持大内存页中所述。我还通过运行java版本命令验证

  • 我正在Windows 8.1 64位上开发java swing应用程序,带有4GB内存和JDK版本8u20 64位。 问题是当我使用带有监视器选项的Netbeans profiler启动应用程序时。 加载第一个Jframe时,应用程序Memory Heap约为18mb,JVM进程大小约为50mb(Image1)。 然后,当我启动另一个Jframe时,它包含一个带有webView的JFxPanel,

  • 我试图在docker容器内JavaSpring Boot应用程序中寻找内存泄漏。 应用程序的堆大小如下所示: 本机内存差异如下所示: 本机内存跟踪: 总计:保留=8295301KB 1728KB,已提交=2794537KB 470172KB 获取堆转储后: 堆泄漏可疑报告非常小-45MB: 问题是:为什么Java堆提交=2245120KB-几乎2GB?它不符合Xmx512m,也不符合jmap的堆转

  • 问题内容: 如何在Selenium WebDriver中更改页面缩放级别?我试过了: 但这是行不通的。 问题答案: 请注意,Selenium假定缩放级别为100%!例如,当缩放级别不同时,IE将拒绝启动(引发异常),因为元素位置取决于此,并且如果更改缩放级别,它将在错误的位置单击错误的元素。 Java 您可以使用以下方法: 请谨慎使用,并在完成后将缩放比例重置为100%: C# (因为我意识到C#