我在Linux上使用Gemfire v7.0.1.3。下面是我的缓存xml。
<?xml version.....>
<!DOCTYPE....>
<cache is-server="true">
<disk-store name="myStore" auto-compact="false" max-oplog-size="1000" queue-size="10000" time-interval="150">
<disk-dirs>
<disk-dir>.....</disk-dir>
</disk-dirs>
</disk-store>
<region name="myRegion" refid="PARTITION_PARSISTENT_OVERFLOW">
<region-attributes disk-store-name="myStore" disk-synchronous="true">
<eviction-attributes>
<lru-entry-count maximum="500" action="overflow-to-disk" />
</eviction-attributes>
</region-attributes>
</region>
</cache>
现在我启动缓存服务器分配8GB。当我使用String作为缓存键和一个自定义对象(每个对象有4个双数组,每个都有10000个大小)作为值时,我可以在缓存中存储500亿个对象而没有任何问题。我可以看到磁盘存储目录有.crf,.krf,.drf文件。如果我重新启动缓存,元素将恢复,所有好东西。但是,如果我使用自定义对象作为键和值,我会在区域中创建25000(大约)条目后开始获得低内存异常。这是预期的行为吗?因为Gemfire文档说当我们一起使用持久性和溢出时,所有键和最近最少使用的值都溢出到磁盘,并且大多数活动条目值都保存在内存中。所以,我期待的是,只要我的磁盘存储空间可用,我就可以在该区域存储任意数量的对象。但我的内存异常低。请帮我理解。
由于
答案 0 :(得分:0)
密钥永远不会溢出到磁盘,因此您的内存必须足够大以容纳所有密钥。对于持久性区域,密钥也会写入磁盘,但这仅用于恢复目的。因此,如果对象键的大小远大于字符串键的大小,则会出现此行为。