Google app engine 为什么在dev服务器上使用数据存储API时发生内存泄漏(未在生产中测试)?

Google app engine 为什么在dev服务器上使用数据存储API时发生内存泄漏(未在生产中测试)?,google-app-engine,memory-leaks,google-cloud-datastore,Google App Engine,Memory Leaks,Google Cloud Datastore,大家能帮我找出内存泄漏的原因吗?这让我发疯: 我正在使用GAE SDK 1.6.1。我用一个servlet创建了示例项目,其中包含以下doGet方法 protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException { {

大家能帮我找出内存泄漏的原因吗?这让我发疯:

我正在使用GAE SDK 1.6.1。我用一个servlet创建了示例项目,其中包含以下doGet方法

protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException
{
    {
        DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

        System.out.println();
        for (long i = 1; i <= 10000000; ++i)
        {
            Entity entity = new Entity("Visitor");
            entity.setProperty("name", "Name is " + i);
            entity.setProperty("value", "Value is " + i);
            Key key = datastore.put(entity);
            System.out.println(key.getId());
        }
    }
}
调用此servlet失败,OutOfMemory异常,因为所有临时数据存储对象都保留在内存中

下面是使用YourKit Java Profiler获得的对保留对象的传入引用的树

有人知道为什么吗?我怎样才能避免这种情况?在我的开发环境中是GAE特定的bug还是什么

谢谢

我刚刚找到一个线程,Ikai Lan Google说开发服务器数据存储存根是一个内存中的映射,可以持久化到磁盘


也许它回答了我的问题。

是的,它回答了你的问题。这是在dev_appserver上发生的,还是在生产中发生的?它发生在dev_appserver上。我对生产没有把握。我刚上传到http://alphahuber.appspot.com/test 在内存耗尽之前,它抛出DeadlineExceededException。但另一方面,我不知道GAE实例上的堆有多大。嘿@NickJohnson,除了提高JVM堆大小之外,你能建议解决方法吗?谢谢@ruslan上传更少的数据?对不起,恐怕没有太多关于数据存储存根的内存性质的内容。