0

我们的 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;

}
4

1 回答 1

1

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

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

但是,当使用 Jython 2.5.2 及更高版本时,本身没有任何问题,但是当在不同线程上同时使用多个 PythonInterpreter 对象时,永久生成对象(类和静态成员)的必要内存会增加,因此您必须开始你的虚拟机:

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

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

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

于 2012-11-19T13:27:46.613 回答