gpt4 book ai didi

java - 在 Linux 上的 java hotspot jvm 中使用大页面和 DirectByteBuffer

转载 作者:行者123 更新时间:2023-12-03 20:17:46 28 4
gpt4 key购买 nike

我想做什么

我需要使用直接内存来避免 GC 移动东西。我想为那些启用大页面。

到目前为止

标志 -XX:+UseLargePages 在使用堆缓冲区(非直接字节缓冲区)时工作正常,但在使用 DirectByteBuffers 时不再工作。我也尝试过使用 MappedByteBuffers 和 hugetlbfs 文件系统。这可行,但会引发许多问题,因此我正在寻找不同的解决方案。

配置CentOS release 6.3, hotspot, jdk1.7

[编辑]

查看热点源代码,他们正在使用 malloc 分配带有不安全的内存,是否需要 shmat/shmget 或 mmap 来使用大页面。

[编辑] 为什么非堆内存

我们处于 NUMA 上下文中,用于内存数据库,有很多长期存在的对象。当 UseNUMA 标志打​​开时,JVM 不会对老一代进行分区。使用直接内存使我们能够让内存靠近需要它的线程。

基准测试显然在决定使用 DirectByteBuffers 方面发挥了重要作用。我不是问我是否应该使用 DirectByteBuffer,我是在寻找问题的答案。

最佳答案

您是否有明确表明 GC 重定位是您的应用程序瓶颈的基准?

如果不是,请不要这样做。

如果是这样,请添加指向它的链接,以便对其进行同行评审。

众所周知,这些低级效果很难作为性能问题的原因而被隔离,并且很可能会浪费大量时间来追逐幻影效果并产生试图绕过 JVM 的解决方案并且只会导致如果你坚持走人迹罕至的道路,所获得的性能要差得多。

关于java - 在 Linux 上的 java hotspot jvm 中使用大页面和 DirectByteBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16300901/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com