2015-04-22 52 views
0

由于高内存使用情况,我目前正在运行Google App Engine应用程序中的软内存错误。许多大型对象正在推动内存使用量高速增长。使用memcache会减少我的实例内存吗?

我想也许如果我设置并从memcache中调用它们可能会减少整体内存使用量。阅读文档看起来并不是这样,memcache的好处是减少HRD查询。

memcache会对整体内存产生积极或消极的影响吗?

编辑:我知道我可以升级实例类到F2,但我试图看看我是否能够在减少内存的同时保持最低的成本。

回答

3

将对象移入和移出Memcache将不会影响您的内存,除非您在Java代码或空集合中销毁这些对象。

更大的问题是memcache实体被限制为1MB,并且memcache不能保证。第一个限制意味着你不能将非常大的对象放入Memcache中。

第二个限制意味着你不能容易地用memcache替换,例如,一个HashMap - 不可能告诉getValue()是否返回null,因为一个对象不存在或者因为它被碰撞出memcache。因此,您每次都必须拨打一个额外的电话到数据存储区,以查看某个对象是否真的不存在。

+0

这通常是真的,我可以看到memcache可以帮助的情况。如果代码使用大量内存来计算一个小结果,那么可能会缓存结果,从而减少计算它的需要并减少内存使用量。如果这个问题对于这个场景不那么模糊,那么给出替代方案会更容易 –

+0

我不知道如何缓存一个小对象(结果)会减少内存使用量。通常情况下,当你需要将大量数据读入内存时,需要大量内存,并且直到最后才能丢弃它。我同意,有很多方法可以减少内存使用量,特别是在涉及循环和集合的情况下。 –

+0

谢谢。我的方案是我有很多请求来读取同一个blob而不改变它。通过多次请求反复加载它似乎会将内存使用量超过128MB – user1961