描述
有一个大型的球员数据库200.000和下面是.ftl model
<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类如下所示:
public FinalXMLVo extends HashMap<String,Object>{
 ...
 private List<Player> players;
 public FinalXMLVo(....,List<Player> players){
  ...
  this.put("items",players);
 }
...
}发布于 2019-05-11 10:09:17
您传递给FreeMarker缓冲区的所有输出都是FreeMarker吗?也许看到OutOfMemoryException通常发生的位置有助于解决这个问题。
除此之外,我不知道为什么更长的列表会在FreeMarker中消耗更多的内存。至少在您正在展示的这样一个基本用例中,它应该能够保持一个无限列表的呈现。
另外,如果您使用的不是List,而是使用Iterator,那么这也会释放内存,因为数据源(比如ResultSet )足够聪明,不需要对所有数据进行缓冲。
https://stackoverflow.com/questions/56017977
复制相似问题