0

Jython 環境に問題があります。つまり、PythonInterpreter オブジェクトで eval を一定量呼び出すと、「Permgen メモリが不足しています」というエラーが発生します。

誰もこれについて経験があり、それを解決する方法はありますか?

現在、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 オブジェクトを同時に使用すると、永続的な生成オブジェクト (クラスと静的メンバー) に必要なメモリが発生するため、開始する必要があります。 VM を次のように使用します。

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

したがって、永久世代オブジェクトに割り当てられる開始メモリと最大メモリが増加します。

これが他の人がこの問題をより迅速に解決するのに役立つことを願っています.

于 2012-11-19T13:27:46.613 に答える