多くのクラスでScalaに大きなGUIアプリケーションを作成しており、すべてのクラスをロードできるようにPermGenスペースを増やす必要がありました。アプリケーション自体には一連の画面ベースのアクティビティが表示され、それぞれに独自の大きなクラスセットがロードされます。任意の時点で1つのアクティビティのみがロード/表示されます。いくつかの活動を行った後、PermGenスペースにOutOfMemoryError
がありました。複数のクラスローダーを使用してPermGenスペースを保存する
私はPermGenのスペースがgarbage collected just like the rest of the heapであることを理解していますが、私はPermGenのスペースを減らすことができますか?アクティビティごとに1つずつClassLoader
があり、クラスのアンロードを許可します。だから、
:
- 私は、彼らは永遠に自分のクラスローダによって参照されるように、システムクラスローダによってロードされたクラスは、アンロードすることができないことを理解しています。本当?
- 私のカスタムクラスローダーによってロードされたクラスのインスタンスがなくなり、クラスローダーがガベージコレクションされ、そのクラスがアンロードされ、PermGenスペースが解放されますか?
- クラスのアンロードに関連する警告(または一般的な間違い)がありますか?
PermGenの大きさはどれくらいですか? –
128mが小さすぎると、現在は256mが動作しますが、どれくらい時間がかかりますか? –