【发布时间】:2012-01-12 04:25:01
【问题描述】:
你们能帮我找出内存泄漏吗?我来自 C++ 世界,Java 中的内存泄漏对我来说有点奇怪,因为根据我的代码,我没有保留对临时对象的引用。
我正在使用 GAE SDK 1.6.1 和 Objectify 3.1。
我有以下方法正在 GAE 开发服务器的后端实例中执行(这可能与问题无关)。
private void loadProtoBufdata() throws Exception
{
ObjectifyDAO dao = new ObjectifyDAO();
for (long count = 0; count < 100; ++count)
{
Visitor visitor = new Visitor();
visitor.setKey(count + 1);
dao.ofy().put(visitor);
}
dao = null;
}
在 ObjectifyDAO 的构造函数中,它被初始化为
public ObjectifyDAO()
{
super(new ObjectifyOpts().setSessionCache(false).setGlobalCache(false));
}
而Visitor 就这么简单
public class Visitor
{
@Id
Long key;
Long ek;
@Unindexed String ip;
Date t;
@Unindexed Long lzVisit;
}
我正在使用 JProfiler 7.0.1 来捕获内存泄漏。运行此代码后,我有几兆字节的 com.google.storage.onestore.v3.OnestoreEntity$PropertyValue 和 com.google.storage.onestore.v3.OnestoreEntity$Property。
我不想炸毁这篇文章,所以我从 JProfiler 上传了截图。
我在 Objectify 的跟踪器上找到了this bug,还在 Google Ground for GAE 上找到了this thread。所以我不确定这是谁的错误。
问题是:
1) 如何避免内存泄漏? 2) 它发生在生产中吗?
谢谢!!!
PS。尼克,我知道你正在读这篇文章。请帮忙:)
【问题讨论】:
标签: google-app-engine memory-leaks google-cloud-datastore objectify