我在GAE memchace中存储了大约20k条目的地图。每个条目大约1Kb。 我收到以下错误。是否有限制?在我理解的1Mb的限制中,对于放入内存缓存的每个实体,并不是整个批次。Google App Engine java OutOfMemoryError当putAll在memcache上时
java.lang.OutOfMemoryError: Java heap space
at com.google.appengine.repackaged.com.google.protobuf.AbstractMessageLite.toByteArray(AbstractMessageLite.java:34)
at com.google.appengine.api.memcache.MemcacheServiceApiHelper.makeAsyncCall(MemcacheServiceApiHelper.java:104)
at com.google.appengine.api.memcache.AsyncMemcacheServiceImpl.doPutAll(AsyncMemcacheServiceImpl.java:521)
at com.google.appengine.api.memcache.AsyncMemcacheServiceImpl.putAll(AsyncMemcacheServiceImpl.java:564)
at com.google.appengine.api.memcache.MemcacheServiceImpl.putAll(MemcacheServiceImpl.java:112)
[...]
我的代码如下所示:
final HashMap<EntityToStoreKey, EntityToStore> map = new HashMap<EntityToStoreKey, EntityToStore>();
for (EntityToStore entityToStore : entitiesToStore) {
index.add(entityToStore);
map.put(EntityToStoreKey.key(entityToStore.getId(), false), entityToStore);
}
entityToStoreCache.putAll(map, portalCacheTimeout);
而问题只发生在一个督促的环境,而不是在本地。
任何帮助/提示?
这似乎并非是一个'memcache'问题。在将数据提供给memcache之前,它将被序列化,那就是当你超出堆的大小时。如果你的实体的大小是1K,这是令人惊讶的。物质内是否有周期性的参考? – cheeken 2012-04-01 19:42:23