内存不足

时间:2021-07-21 06:32:03

标签: freemarker

我正在使用 springboot+freemarker。 客户可以修改 freemarker 模板。 如果您添加 <#assign x><#list 1..9999999999999 as n>${n}</#list></#assign>${x} 后端将抛出内存不足错误。 有没有办法可以定义模板的内存。

3 个答案:

答案 0 :(得分:0)

您可以使用 Xmx 选项增加应用程序使用的内存(不是专门用于模板)。

例如:

java -Xmx20G -jar app.jar

将使用 20Gb 内存启动 app.jar。

不幸的是,您的模板几乎不可能工作,因为它试图创建一个包含 100,000 亿个元素(1e13 个元素)的字符串,这至少需要 10 TB 的内存。我什至不确定 Java 是否可以处理这种大小的字符串。

答案 1 :(得分:0)

FreeMarker 目前没有支持/解决方案:

<块引用>

创建几乎永远运行(使用循环)或耗尽内存(通过连接到循环中的字符串)的模板是微不足道的。 FreeMarker 无法强制执行 CPU 或内存使用限制,因此这在 FreeMarker 级别没有解决方案。

您不应该盲目地让客户处理 freemarker 模板

答案 2 :(得分:0)

还要考虑安全隐患。 FreeMarker 模板可以调用您放入数据模型的对象的公共方法。见https://freemarker.apache.org/docs/app_faq.html#faq_template_uploading_security

如果您的用户不可信(并追究其责任),您就不能允许他们指定 FreeMarker 模板。