使用Jython的内存不足

时间:2012-11-16 14:04:06

标签: 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;

}

1 个答案:

答案 0 :(得分:1)

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

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

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

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

因此增加了为永久生成对象分配的开始和最大内存。

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