2

パフォーマンス上の理由から、String.intern()を使用する外部ライブラリを使用しています。それは問題ありませんが、特定の実行でそのライブラリを頻繁に呼び出しているので、恐ろしいことに遭遇します

java.lang.OutOfMemoryError:PermGenスペース

明らかに、JVMコマンドライン-XX:MaxPermSize修飾子を使用できますが、そのソリューションはあまりスケーラブルではありません。代わりに、定期的に(ライブラリ呼び出しの2つの「バッチ」の間で)インターンされた文字列プールを「フラッシュ」する方法はありますか?つまり、Stringクラスによって保持されている文字列の静的テーブルを空にしますか?

4

2 に答える 2

3

さらに調査したところ、この記事を見つけました。これは、インターンされた文字列がまだガベージ コレクションされていることを示しているようです。これは、ここでの問題がより深いものであることを意味していると思います-使用するライブラリは、これらの文字列への生きた参照を保持する必要があります:(

于 2011-01-15T09:32:00.830 に答える
3

いいえ、permgen のサイズを適切に調整してください。ヒープのサイズを適切に設定する必要があるのと同じです。恐れるな!

于 2011-01-15T09:18:42.233 に答える