GridGain关闭堆不起作用

时间:2014-09-22 14:45:36

标签: bigdata gridgain

请问,有人可以快速查看我的代码有什么问题,应该通过GridGain将缓存存储在Off Heap Memory中?

我的配置与维基页面(http://doc.gridgain.org/latest/Off-Heap+Memory

完全相同

我的配置如下:

<!-- 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"/>

然而,jconsole显示,数据仍然写入堆内存,因为它是波动的,当我尝试获取数据时,我已经存储了,我得到零结果。

代码如下:

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”。这很奇怪,可能,我不太明白,如何访问Off Heap内存。是否有其他/单独的API?

提前致谢

2 个答案:

答案 0 :(得分:0)

正确,还有另一个API

GridCache<String, Object> cache = grid.cache("partitioned");
Iterator<Map.Entry<String, Object>> localIterator = cache.offHeapIterator();

但是,请注意,如果在堆上存储数据,'grid.cache(“partitioned”)'将返回整个集群的缓存,但是在存储数据的情况下'cache.offHeapIterator()'仅返回堆返回集群中本地节点的数据。

这让我有点困惑。

答案 1 :(得分:0)

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

  • 按键访问数据时,堆上和堆外数据存储没有区别:grid.cache("partitioned")仍然适用于整个群集的缓存,而不仅仅是本地条目。无论您执行代码的节点如何,都可以使用cache.get(...)方法按密钥访问数据。
  • 有不同的方法可以返回堆上和堆外内存的本地大小。 cache.size()返回存储在缓存中的堆上条目数。 cache.offHeapEntriesCount()返回存储在堆外存储中的条目数。 cache.swapKeys()返回存储在swap中的条目数。
  • on-heap,off-heap和swap的入口迭代器始终返回节点的本地条目。如果需要整个缓存迭代,可以使用扫描查询或广播一个将遍历本地条目的闭包。