0

最近我注意到,在 Linux 发行版中,我们有大页面内存,可以设置为始终允许系统一直使用大页面,疯狂地让应用程序确定它们是否要使用大页面,或者从不

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

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

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

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

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

即使UseTransparentHugePages=false在 linux 中将大页面大小设置为始终会激活 JVM 以使用大页面?

4

1 回答 1

1

是否将 LargePageHeapSizeThreshold 设置为小于 MaxHeapSize 的值会激活大页面,即使 UseTransparentHugePages=false 也是如此?

不,反之亦然:如果最大堆大小小于LargePageHeapSizeThreshold,默认情况下禁用大页面。

但是,这仅适用于“客户端”VM,它没有 C2 或 Graal 编译器(现在是一种非常奇特的情况)。因此,在最流行的 JVM 版本中,该标志LargePageHeapSizeThreshold完全没有影响。

即使 UseTransparentHugePages=false,在 linux 中将大页面大小设置为始终会激活 JVM 使用大页面吗?

我假设您的意思是以下设置:

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

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

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

于 2019-09-29T14:42:43.930 回答