首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用FreeMarker流巨大列表,内存不足异常

使用FreeMarker流巨大列表,内存不足异常
EN

Stack Overflow用户
提问于 2019-05-07 07:56:29
回答 1查看 339关注 0票数 0

描述

有一个大型的球员数据库200.000和下面是.ftl model

代码语言:javascript
运行
复制
<header> ... <header>
<main>
!Here is the problem
<#list items as vo>
  <name> $vo.name} </name>
  <surname> ${vo.surname} </surname>
  <abilities> ${vo.abilities} </abilites>
</#list>
</main>
<footer>  ... </footer>

,怎么了?

当我有少量球员的时候,上面的效果很好,比如说5.000

我想做什么?

我需要立即为所有球员创建这个文档,这意味着我必须传递一个列表与100.000或更多的球员。这将导致Java OutOfMemoryException

所以我每次都会抓取1.000播放器并创建列表,但问题是.怎样才能像以前一样通过所有的球员?我有一个.ftl模型,FreeMarker不支持那样的东西.

我希望所有的200.000播放器都在同一个文档中。

我应该使用什么技巧:)?

Java类如下所示:

代码语言:javascript
运行
复制
public FinalXMLVo extends HashMap<String,Object>{

 ...
 private List<Player> players;

 public FinalXMLVo(....,List<Player> players){

  ...
  this.put("items",players);

 }

...

}
EN

回答 1

Stack Overflow用户

发布于 2019-05-11 10:09:17

您传递给FreeMarker缓冲区的所有输出都是FreeMarker吗?也许看到OutOfMemoryException通常发生的位置有助于解决这个问题。

除此之外,我不知道为什么更长的列表会在FreeMarker中消耗更多的内存。至少在您正在展示的这样一个基本用例中,它应该能够保持一个无限列表的呈现。

另外,如果您使用的不是List,而是使用Iterator,那么这也会释放内存,因为数据源(比如ResultSet )足够聪明,不需要对所有数据进行缓冲。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56017977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档