LargePageHeapSizeThreshold 会激活JVM 中的UseTransparentHugePage 吗?

does the LargePageHeapSizeThreshold activates the UseTransparentHugePage in JVM?

最近我注意到在 Linux 发行版中我们有大页面内存,可以设置为 always 以允许系统一直使用大页面, madvise 让应用程序决定是否要使用大页面,或者 never.

此功能有时会降低应用程序性能。

在 JVM 中,我们有两个可以激活的参数来控制此 OS 功能。

LargePageHeapSizeThreshold:如果这个值小于MaxHeapSize JVM 使用大页面大小。

UseTransparentHugePages: 是一个布尔值,可以是真或假。

我的问题是将 LargePageHeapSizeThreshold 设置为小于 MaxHeapSize 的值会激活大页面,即使 UseTransparentHugePages=false?

在 linux 中将大页面大小设置为 always 是否会激活 JVM 使用大页面,即使 UseTransparentHugePages=false

is setting the LargePageHeapSizeThreshold to a value less than MaxHeapSize activates the huge page even if the UseTransparentHugePages=false?

不,它有效the other way round:如果最大堆大小小于LargePageHeapSizeThreshold,默认情况下禁用大页面。

然而,这仅适用于 'client' VM,它没有 C2 或 Graal 编译器(如今是一种非常奇特的情况)。因此,在最流行的 JVM 版本中,标志 LargePageHeapSizeThreshold 根本没有影响。

Does setting huge page size to always in linux activates the JVM to use large page even if UseTransparentHugePages=false?

我假设您指的是以下设置:

echo always >/sys/kernel/mm/transparent_hugepage/enabled

在此模式下,Linux 尝试为匿名内存映射(包括 Java 堆和代码缓存)分配大页面,而应用程序甚至不知道大页面。所以,是的 - JVM 可能会从这个选项中受益,即使它不关心大页面本身。

另一方面,不能保证Java堆在这种模式下总是使用大页面。如果 Linux 无法为内存区域分配大页面(例如由于碎片),它将静静地回退到使用普通页面。