我在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