【问题标题】:Memory leak after persisting the object into GAE Datastore [closed]将对象持久保存到 GAE 数据存储后的内存泄漏 [关闭]
【发布时间】: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$PropertyValuecom.google.storage.onestore.v3.OnestoreEntity$Property

我不想炸毁这篇文章,所以我从 JProfiler 上传了截图。

参考树是here。分配树是here

我在 Objectify 的跟踪器上找到了this bug,还在 Google Ground for GAE 上找到了this thread。所以我不确定这是谁的错误。

问题是:

1) 如何避免内存泄漏? 2) 它发生在生产中吗?

谢谢!!!

PS。尼克,我知道你正在读这篇文章。请帮忙:)

【问题讨论】:

标签: google-app-engine memory-leaks google-cloud-datastore objectify


【解决方案1】:

查看http://www.eclipse.org/mat/,它非常适合分析内存泄漏

http://wiki.eclipse.org/index.php/MemoryAnalyzer#Getting_a_Heap_Dump

如果存在内存泄漏,则说明某些东西挂在引用上。 MAT 之类的工具可以帮助您查看这些对象上挂着的是什么。

另外,您可能想在生产环境中尝试测试。您可以在 appspot.com 实例视图上检查内存使用情况。生产应用程序引擎有时会表现得完全不同。

【讨论】:

    猜你喜欢
    • 2011-10-23
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多