为什么在开发服务器上使用 DataStore API 时会发生内存泄漏(未在生产中测试)?
请大家帮我找出导致内存泄漏的原因吗?这让我发疯:(((
我正在使用 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 特定的错误还是我的开发环境中的其他问题
?
Could guys please help me find what causes memory leak ? It drives me crazy :(((
I'm using GAE SDK 1.6.1. I created sample project with single servlet that contains following doGet method
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());
}
}
}
Call to this servlet fails with OutOfMemory exception because all temporary datastore objects remain in the memory.
Here is tree of incoming references to held object obtained using YourKit Java Profiler.
Does anybody know why? How can I avoid this? Is it GAE-specific bug or something in my development environment?
Thanks!!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我刚刚发现此帖子,其中 Ikai Lan(Google)说“开发服务器数据存储存根是一个持久保存到磁盘的内存映射”。
也许它回答了我的问题。
I just found this thread where Ikai Lan (Google) says "The development server datastore stub is an in memory Map that is persisted to disk".
Perhaps it answers my question.