Netbeansは15〜30分ごとに「Java.lang.OutOfMemoryError: PermGen space
"。Googleから学んだことから、これは一般的にクラスローダーのリークまたはメモリリークに関連しているようです。
残念ながら、私が見つけた提案はすべてアプリケーションサーバーに関連しており、それらをNetbeansに適応させる考えはありません。 (同じ問題かどうかさえわかりません)
それは私のアプリケーションの問題ですか?ソースを見つけるにはどうすればよいですか?
これは、一定のクラスローディングのためです。
Javaは、クラスのバイトコードとすべての定数(文字列定数など)を、デフォルトでガベージコレクションされない永続ヒープに格納します(クラスはアプリケーションの存続期間中に1回だけロードされるため、ほとんどの状況で意味があります)。
存続期間全体でクラスをロードすることが多いアプリケーションでは、次のとおりです。
このエラーを防ぐには、永続的なヒープガベージコレクションをオンにする必要があります。
オプションを使用します
-XX:MaxPermSize=256M
-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled
(私のEclipse 3.4が "Java.lang.OutOfMemoryError: PermGen space
"をスローしないようにしたので、netbeansでも動作するはずです)。
編集:Netbeansの場合、これらのオプションを次のように設定することに注意してください:[Netbeans installation]\etc\netbeans.conf
これらのオプションの前に-J
を付け、netbeans_default_options
に追加する必要があります(詳細については、netbeans.conf
のコメントを参照してください)。
次の引数をnetbeans netconfに追加してみてください:-J-XX:MaxPermSize = 256m
Webアプリケーションを開発している場合は、サーバーのVMオプションを設定してみてください
-Xmx512m -Xms512m -XX:MaxPermSize = 512m
ツール/サーバー//プラットフォーム/ VMオプション(Netbeans 7.4)に移動します
PermSizeのサイズを設定する方法については、この link を参照してください。ほとんどの場合、これはコードの問題ではないため、唯一の解決策はPermSizeを増やすことです。 JAXBを使用する場合、これはかなり頻繁に発生することがわかりました。一般に、それ自体が他の多くのjarファイルにも依存する多くのライブラリを使用する場合、PermGenスペースのデフォルトサイズは十分に大きくない場合があります。
詳細については、次のブログ投稿を参照してください。 クラスローダーリーク および 恐ろしい「Java.lang.OutOfMemoryError:PermGenスペース」を修正する方法
ファイル/etc/netbeans.confを編集することにより、netbeansJVMの起動オプションを変更できます。 Webappを開発し、それを頻繁に展開するときに、この種のエラーが発生することがよくあります。その場合、Tomcatを時々再起動します。