サーバ(tomcat)上の同じwar-fileの展開 - 展開解除アクションが繰り返し実行される場所がPermGen OutOfMemoryErrorになっています。私の目標は、戦争が展開されていないときにすべてのクラスをアンロードすることです。ここでJavaプロファイリングPermgen:javaクラス内で列挙型をアンロードする方法
は、私が持っているクラスです。
public class ClassA {
//static variables & methods
//instance variables & methods
private EnumInsideClassA myState = EnumInsideClassA.VALUE1;
private enum EnumInsideClassA
{
VALUE1,
VALUE2
}
}
私はにClassAの参照をすべてクリアしたとき、私はにClassAを見ることができなかったとの戦争がアンデプロイされたとき、それがアンロードされました。しかし、私はまだenum参照を参照し、ClassA $ EnumInsideClassAはアンロードされません。
あり「myState」インスタンス変数にはゲッターがありませんし、それだけですべてのヘルプは
あなたはJVMの引数を試してみました_ " - XX:+ CMSClassUnloadingEnabled -XX:+ CMSPermGenSweepingEnabled" _? これは同様の質問です:[link](http://stackoverflow.com/questions/88235/how-to-deal-with-java-lang-outofmemoryerror-permgenspace-error) – samlewis
ありがとうございました。はい、私はしばらく前にそれを試しました。そして私はもう一度それを試しました。ただし、内部クラス(Enum)はクリーンアップされていません。もう1つは、ClassAがこれらのJVMオプションを使用してアンロードされていることです。 – Chris