Apache POIを使用してノート文書をexcel(xlsm)にエクスポートするエージェントがあります。私は、recycle()を使用してオブジェクトを設定するか、ヌルにオブジェクトを設定することによってメモリを解放する可能性のあるすべての方法に従っています。しかし、JVMはまだヒープサイズを使い果たし、 "メモリ不足"エラーをスローします。エラーが来てどのように頻繁3.17 Domino JVMメモリとPOI
- デフォルトヒープサイズ= 256メガバイト
- POIのバージョンはありますか?エージェントをWebから5〜6回連続して実行した場合。
- XLSMのテンプレートサイズ:書き込みレコードの
- 数90キロバイト -
もう一つ私が観察していなことが、理解することができませんでし10-30は、JVMのメモリを解放する/使用方法です。例えば、私はコードを開始する前に、コードは次のコードを使用して終了した後、「利用可能」のメモリを、印刷しています私は私の薬のようにそれが印刷物に非常に最初の時間をテスト
Runtime runtime = Runtime.getRuntime();
double usedMemory = usedMemory(runtime);
System.out.println("START - Initial memory :: " + String.valueOf(usedMemory))
static double usedMemory(Runtime runtime) {
long totalMemory = runtime.totalMemory();
long freeMemory = runtime.freeMemory();
double usedMemory = (double)(totalMemory - freeMemory)/(double)(1024 * 1024);
return usedMemory;
}
、
JVM START:可能な初期メモリー:60メガバイト
JVMのEND:使用メモリ:エージェントが起動したときに、それが印刷さ90メガバイト
第二に、時間、
JVM START:利用できる初期メモリ:130メガバイト
JVMのEND:使用メモリ:160メガバイト
私は、コードの末尾にメモリを解放していたとしても、私はそれはdoesnの参照最初のメモリ(60 MB)まで下がっていませんか?
/* Free up memory */
webDoc.recycle();
docA.recycle();
vwLookup.recycle();
curDb.recycle();
session.recycle();
agentContext=null;
fpath.delete();
xlFile.delete();
runtime = Runtime.getRuntime();
usedMemory = usedMemory(runtime);
System.out.println("END - MAIN :: Total used memory: " + String.valueOf(usedMemory));
freeMemory();
POIの瓶はどこに置いたのですか?データベース内またはドミノサーバーのファイルシステム内にありますか? –
私は、データベースに配置している、ファイルシステムに配置されている場合、サーバー上のアプリケーションを配布するのは難しいです。さらに、私は管理者の依存関係を望まない。 – Rishi