Search code examples
bigdatagridgain

GridGain Off Heap doesn't work


could, please, someone take a quick look, what is wrong with my code, that is supposed to store cache in Off Heap Memory through GridGain?

My configuration is quite the same, as on the wiki page (http://doc.gridgain.org/latest/Off-Heap+Memory)

My configuration is following:

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

However, jconsole shows, that data is still written to the heap memory, as it is fluctuating and when I try to get data, that I've stored, I get the zero result.

Code is following:

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());

The last one line shows me "Cache size: 0". That's strange, probably, I do not quite understand, how to access Off Heap memory. Is there other/separate API for that?

Thanks in advance


Solution

  • Correct, there is another one API

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

    However, pay attention, that 'grid.cache("partitioned")' in case of storing data on heap returns the cache for whole cluster, but 'cache.offHeapIterator()' in case of storing data off heap returns only data for the local node in a cluster.

    This confused me a bit.