我的配置与维基页面(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?
提前致谢
答案 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中的条目数。