首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >离开堆的GridGain不工作

离开堆的GridGain不工作
EN

Stack Overflow用户
提问于 2014-09-22 14:45:35
回答 2查看 129关注 0票数 0

请有人快速看一看,我的代码有什么问题,应该通过GridGain将缓存存储在堆内存中吗?

我的配置与wiki页面(http://doc.gridgain.org/latest/Off-Heap+Memory)的配置完全相同。

我的配置如下:

代码语言:javascript
复制
<!-- Enable OffHeap -->
<property name="offHeapMaxMemory" value="#{2L * 1024L * 1024L * 1024L}"/>

<!-- Always store cache entries in off-heap memory, evict to Swap. -->
<property name="memoryMode" value="OFFHEAP_TIERED"/>

然而,j控制台显示,数据仍然被写入堆内存,因为它是浮动的,当我试图获取数据时,我存储了数据,得到了零结果。

守则如下:

代码语言:javascript
复制
final GridCache<String, Object> cache = grid.cache("partitioned");
for (long i = 0; i < 1000; i++) {
    cache.putx(String.valueOf(i), hundredBytes.clone());

    if (i % 1024 * 1024 == 0) {
        System.out.println(i + "bytes inserted");
    }
}

System.out.println("Cache size: " + cache.size());

最后一行显示“缓存大小: 0”。这很奇怪,可能,我不太明白,如何访问堆内存。对此是否有其他/单独的API?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-22 16:21:14

对,还有一个API

代码语言:javascript
复制
GridCache<String, Object> cache = grid.cache("partitioned");
Iterator<Map.Entry<String, Object>> localIterator = cache.offHeapIterator();

但是,请注意,在堆上存储数据的情况下,‘grid.cache(“分区”)返回整个集群的缓存,而'cache.offHeapIterator()’在堆外存储数据时只返回集群中本地节点的数据。

这让我有点困惑。

票数 0
EN

Stack Overflow用户

发布于 2014-09-23 01:58:52

关于堆上/堆外的差异有几点:

  • 当您按键访问数据时,堆上数据存储和堆外数据存储没有区别:grid.cache("partitioned")仍然可以处理整个集群的缓存,而不仅仅是本地条目。您可以使用cache.get(...)方法通过键访问数据,而不管您在哪个节点上执行代码。
  • 有不同的方法可以返回堆上内存和堆外内存的本地大小。cache.size()返回存储在缓存中的堆上条目的数目。cache.offHeapEntriesCount()返回存储在堆外存储中的条目数。cache.swapKeys()返回存储在交换区中的条目数。
  • 堆上、离堆和交换的条目迭代器总是返回节点的本地条目.如果需要整个缓存迭代,可以使用扫描查询或广播闭包,这将迭代本地条目。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25976897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档