java - 使用 Jython 时内存不足

标签 java jython out-of-memory permgen

我们的 Jython 环境存在问题,这意味着在对 PythonInterpreter 对象进行一定数量的 eval 调用之后,我们遇到了“Out of permgen memory”错误。

有人有这方面的经验以及如何解决吗?

我们目前在 Jython 2.5.2 上运行。

下面是用于重复调用解释器的代码摘录。

public Map<String, String> invoke(Map<String, String> parameters) {

    //logger.info("Executing script for parameters: " + parameters);

    this.interpreter.set("inputDict", parameters);
    PyDictionary dict =  (PyDictionary)this.interpreter.eval(ScriptComposer.mainMethodName + "(inputDict)");

    //logger.info("Done executing script for parameters: " + parameters);

    return dict;

}

最佳答案

嗯,我想我已经解决了这个问题,所以为了帮助遇到这个问题的其他人,我将发布一些提示。

对于 2.5.2 之前的 Jython 版本,确实存在一个有关类生成和类引用保留的错误,这意味着在对 eval/exec 进行一定数量的调用之后,将会遇到上述问题。

但是,当使用 Jython 版本 2.5.2 及更高版本时,本身没有任何问题,但是当在不同线程上同时使用多个 PythonInterpreter 对象时,永久生成对象(类和静态成员)所需的内存会增加,因此您必须使用以下命令启动 VM:

-XX:PermSize=$START_JVM_PERMSIZE -XX:MaxPermSize=$MAX_JVM_PERMSIZE 

从而增加分配给永久代对象的起始内存和最大内存。

希望这能帮助其他人更快地解决此问题。

关于java - 使用 Jython 时内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13418157/

相关文章:

java - 使用 S3Client 重命名 S3 上的文件名

java - "new BigDecimal(13.3D)"结果不精确 "13.3000000000000007105.."?

python - 为什么 "as"在 Jython 2.5 中的 "except"语句中导致 SyntaxError?

java - 接下来在 hs_err_pid###.log 文件中查看什么?

c# - 管理一个类的实例数

sdk - 在哪里可以找到与 windows 32 兼容的 Java SDK 1.4.2?

java - XWPFRun 生成修剪了空格的运行

java - 是否可以在 django 项目中使用 Enterprise Java Beans?

java - 使用 Jython REPL 中的现有 Java 类?

javascript - 从该错误中可以读到什么?