gpt4 book ai didi

java - Groovy 模板引擎和内存不足。可能存在内存泄漏吗?

转载 作者:行者123 更新时间:2023-11-30 02:53:19 26 4
gpt4 key购买 nike

我在使用 Java 中的 Groovy TemplateEngines 时遇到一些问题,但没有在 OOM 中运行。当创建很多不同的模板时,在我看来,在堆上创建了很多脚本 - 这些脚本永远不会是垃圾集。

我使用 java 8。当使用 -Xmx32M 运行此代码时,可能会进行大约 3000 次迭代。之后会抛出 OOM 错误。

这是我的代码:

import groovy.text.SimpleTemplateEngine;
import groovy.text.Template;
import groovy.text.TemplateEngine;

import java.util.HashMap;
import java.util.Map;

public class Test {

public static void main(String[] args) throws Exception {
String groovy = "XX-${i}";

for (int i = 0; i < (1000000000); i++) {
TemplateEngine e = new SimpleTemplateEngine();

Template t = e.createTemplate(groovy);

Map<String, Object> binding = new HashMap<>();
binding.put("i", i);

String res = t.make(binding).toString();

if (i % 100 == 0) {
System.out.println("->" + res);
}
}
}
}

我还尝试了不同的变体和 ClassLoaded - 但本质上结果总是相同的。由于我找不到任何当前问题,我想我错过了一些东西。

谁能帮我解答一下吗?

蒂诺

最佳答案

这是你的问题https://bugs.openjdk.java.net/browse/JDK-8037342 .

每次解析器运行时,它都会根据正在完成的解析次数创建一个新的唯一类。例如,过了一会儿,类名称看起来像

groovy.runtime.metaclass.SimpleTemplateScript4237MetaClass groovy.runtime.metaclass.SimpleTemplateScript4238MetaClass

一段时间后,类加载器的 parallelLockMap 将填满堆,并且没有任何内容可以进行 GC。这有点像 OOM PermGen 错误。

关于java - Groovy 模板引擎和内存不足。可能存在内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37992822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com