簡體   English   中英

使用FreeMarker傳輸大量列表,內存不足異常

[英]Stream Huge Lists with FreeMarker , out of memory exception

描述

有一個龐大的玩家數據庫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);

 }

...

}

您傳遞給FreeMarker的Writer是否會緩沖所有輸出? 也許看到OutOfMemoryException通常發生在哪里有助於弄清楚這一點。

除此之外,我不知道為什么更長的列表會在FreeMarker中消耗更多的內存。 至少在您展示的這種基本用例中,它甚至應能夠保持渲染無限列表。

另外,如果不是一個List ,你使用的是Iterator ,就也釋放內存作為數據(如源ResultSet可能)是足夠聰明,不緩沖它的全部。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM