2009-03-23 14 views
27

15分〜30分ごとにNetbeansに「java.lang.OutOfMemoryError: PermGen space」と表示されます。私がGoogleから学んだことから、これは一般にクラスローダーのリークやメモリリークに関連しているようです。NetbeansでPermGenのスペースエラーを防ぐにはどうしたらいいですか?

私が見つけたすべての提案はアプリケーションサーバーに関連しており、Netbeansにそれらを適用することはできません。 (私はそれが同じ問題であるとは確信していません)

私のアプリケーションには問題がありますか?どのようにソースを見つけることができますか?

+0

http://stackoverflow.com/questions/717550/java-lang-outofmemoryerror-java-heap-space-with-netbeans – Steen

+0

さらに最新バージョンのNetBeansにアップグレードしないでください。 6.5は本当に古いです。 –

+4

@a_horse_with_no_name:この質問と同じです。私は3年以上前にそれに尋ねました。 –

答えて

32

それが原因で一定のクラスローディングのです。

Javaはクラスバイトコードと永続ヒープ内のすべての定数(たとえば文字列定数)をデフォルトでガベージコレクションされないクラスに格納します(アプリケーションの存続期間中にクラスが一度だけロードされるため大部分の場合意味があります)。しばしば全体の存続期間中にクラスをロードするアプリケーションで

  • のWebサーバやアプリケーションサーバのホット再デプロイメント時に、
  • 開発されたアプリケーションを実行しているときのIDE(Netbeansで[実行]ボタンを押すか、Eclipseのアプリケーションクラスを新規に読み込むたびに)。
  • など 最終的にヒープがいっぱいになるため、この動作は不適切です。

このエラーを防ぐには、永続ヒープガベージコレクションを有効にする必要があります。

私はオプション

-XX:MaxPermSize=256M 
-XX:+CMSClassUnloadingEnabled 
-XX:+CMSPermGenSweepingEnabled 

(それはまた、NetBeansので動作する必要がありますので、 "java.lang.OutOfMemoryError: PermGen spaceを" 投げから私の日食3.4を停止した)を使用します。

編集は:(より多くの情報のためnetbeans.confのコメントを参照してください)あなたは-Jでこれらのオプションをprefixeとnetbeans_default_optionsにそれらを追加する必要があり [Netbeans installation]\etc\netbeans.conf :だけでNetbeansのためにあなたがそれらのオプションを設定することに注意してください。

+0

OK、答えのどれも本当に助けられませんでしたが、これは私に再起動の間に最も多くの時間を買ってくれました:) –

+0

MaxPermSizeを512M以上に改善しようとすると、hepは、アプリケーションがそれ以上のものを保存する –

+1

(私のケースではrt.jarのバイトコード分析)の引数が働いていたようですが、私は警告を受けました。「CMSClassUnloadingEnabledをCMSPermGenSweepingEnabledの代わりに使用してください将来的に。まだ働いた。 1つの事; – Grundlefleck

2

PermSizeのサイズの設定方法については、linkを参照してください。おそらくこれはあなたのコードの問題ではないので、唯一の解決策はPermSizeを増やすことです。私はJAXBを使用しているとき、これが非常に頻繁であることを発見しました。一般に、他の多くのjarファイルにも依存する多くのライブラリを使用する場合、PermGenスペースのデフォルトサイズは十分に大きくない場合があります。

は、より多くの詳細については、これらのブログの記事を参照してください:Classloader leaksHow to fix the dreaded "java.lang.OutOfMemoryError: PermGen space"

1

あなたはファイル/etc/netbeans.confを編集することでのNetBeans JVMの起動オプションを変更することができます。 Webappを開発して頻繁に展開すると、この種のエラーが発生することがよくあります。その場合、私は時々Tomcatを再起動します。

4

は、NetBeansのNETCONFに次の引数を追加してください:-J-XX:MaxPermSizeを= 256メートル

2

Webアプリケーションを開発している場合、サーバーのVMオプション

-Xmx512m -Xms512m -XXに配置しよう:MaxPermSizeを= 512メートル

をツール/サーバー//プラットフォーム/ VMオプション(Netbeansのに行きます7.4)

関連する問題