私は友人が Knime でノードを開発するのを手伝っています。Knime を知らない人のために説明すると、Knime は基本的に Java のフレームワークであり、プログラムで実行する「何か」を自動化するノードを作成します。各ノードには 4 ~ 5 個のクラスがあり、作成しているワークフローには 50 ~ 60 個のノードがある場合があります。
私は PermGen について調査してきましたが、私の知る限り、これは基本的に、プログラムが実行時に使用する各クラス/関数のコンパイル済み形式のコピーです。多数のクラスがある場合 (私たちが行っています)、PermGen はメモリ不足になります。フローをセットアップするたびに Eclipse がクラッシュするので、クラスの数を減らして再度実行できるようにしようと考えましたが、1 週間前に実行されていた同じフローで依然として PermGen エラーが発生しています。問題の処理方法を調べましたが、どの手段をとるべきか、またその理由がわかりません。
すべての変更は eclipse.ini 用です
PermGenSpace の追加:
-XX:MaxPermSize=1024m
CMSClassUnloadingEnabled:
-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
CMSPermGenSweepingEnabled:
-XX:MaxPermSize=128m
-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
MaxPermSize の設定の変更とそれが問題をどのように解決するかは理解しており、悪影響は見られませんが、他の 2 つの変更がセットアップに悪影響を与える可能性があるかどうかはわかりません。
この問題にどのようにアプローチすればよいですか?
リソース リンク:
http://www.javacodegeeks.com/2013/12/decoding-java-lang-outofmemoryerror-permgen-space.html