5.5. JVM heap 和 off-heap 内存


默认情况下,Data Grid 将缓存条目存储在 JVM 堆内存中。您可以将 Data Grid 配置为使用非堆存储,这意味着您的数据会占用受管 JVM 内存空间之外的原生内存。

下图显示了运行 Data Grid 的 JVM 进程的内存空间:

图 5.1. JVM 内存空间

JVM 堆内存

堆分为年轻而旧代,可帮助在内存中保持引用的 Java 对象和其他应用数据。GC 进程从无法访问的对象回收空间,在生成内存池中更频繁地运行。

当 Data Grid 将缓存条目存储在 JVM 堆内存中时,GC 运行可能需要更长的时间才能开始向缓存中添加数据。因为 GC 是一个密集型过程,所以更频繁地运行可能会降低应用程序性能。

off-heap 内存

off-heap 内存是 JVM 内存管理之外的原生可用内存。JVM 内存空间 图显示包含类元数据且从原生内存分配的 Metaspace 内存池。该图还代表了包含 Data Grid 缓存条目的原生内存部分。

off-heap 内存:

  • 每个条目使用较少的内存。
  • 通过避免 Garbage Collector (GC)运行来提高整体 JVM 性能。

但是,一个缺点是 JVM 堆转储不显示存储在 off-heap 内存中的条目。

5.5.1. 非堆数据存储

当您向现成缓存中添加条目时,Data Grid 会动态地为您的数据分配原生内存。

Data Grid 将每个 键的序列化字节[] 哈希到与标准 Java HashMap 类似的存储桶中。bucket 包括 Data Grid 用来查找存储在 off-heap 内存中的条目的地址指针。

重要

虽然 Data Grid 将缓存条目存储在原生内存中,但运行时操作需要这些对象的 JVM 堆表示。例如,cache.get () 操作会在返回前将对象读取到堆内存中。同样,状态传输操作在堆内存中保存对象子集。

对象相等

Data Grid 使用每个对象的序列化字节[]表示,而不是对象实例,以非堆存储的形式确定 Java 对象的相等性。

数据一致性

Data Grid 使用数组锁定来保护非堆地址空间。锁定的数量是内核数的两倍,然后舍入到最接近的 2 的指数。这样可确保存在 ReadWriteLock 实例甚至分配,以防止写入操作阻止读操作。

5.5.2. 配置离线内存

配置 Data Grid,以将缓存条目存储在 JVM 堆空间之外的原生内存中。

流程

  1. 打开 Data Grid 配置以进行编辑。
  2. OFF_HEAP 设置为 storage 属性或 storage () 方法的值。
  3. 通过配置驱除来为缓存大小设置边界。
  4. 保存并关闭您的 Data Grid 配置。
off-heap 存储

网格将缓存条目存储为原生内存中的字节。当数据容器中有 100 个条目,并且 Data Grid 获取创建新条目的请求时发生驱除:

XML

<replicated-cache>
  <memory storage="OFF_HEAP" max-count="500"/>
</replicated-cache>
Copy to Clipboard Toggle word wrap

JSON

{
  "replicated-cache" : {
    "memory" : {
      "storage" : "OFF_HEAP",
      "max-count" : "500"
    }
  }
}
Copy to Clipboard Toggle word wrap

YAML

replicatedCache:
  memory:
    storage: "OFF_HEAP"
    maxCount: "500"
Copy to Clipboard Toggle word wrap

ConfigurationBuilder

ConfigurationBuilder builder = new ConfigurationBuilder();
builder.memory().storage(StorageType.OFF_HEAP).maxCount(500);
Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat