你们能帮我找到内存泄漏吗?我来自 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 的跟踪器上发现了这个错误,也在Google Ground for GAE 上发现了这个线程。所以我不确定这是谁的错误。
问题是:
1)如何避免内存泄漏?2)它是否发生在生产中?
谢谢!!!
PS。尼克,我知道你正在读这篇文章。请帮忙 :)