2012-04-08 7 views
0

Eclipse Indigoを使用してJavaでアプリケーションを作成しています。 Eclipseを使用して実行すると、タスクマネージャはjavaw.exeが50MBのメモリを使用していることを示します。アプリケーションを実行可能な.jarとしてエクスポートし、.jarを実行すると、タスクマネージャはjavaw.exeが500MBを使用していることを示します。 これはなぜですか?どうすればこの問題を解決できますか?Java .jarが多すぎるメモリを使用する

編集:私はWindows 7の64ビットを使用していて、私のシステムは、私は、Java 1.7がインストールされていると言います。明らかにメモリの問題は、whileループによって引き起こされます。私は問題を引き起こしているwhileループの中にあるものを勉強します。

編集:問題が見つかりました。 whileループのある時点では、新規のBufferedImageインスタンスが作成されますが、同じものを置き換えるのではなくBufferedImageです。

+1

Eclipseインスタンスとアプリケーションインスタンスを混同しないでください。 EclipseもJavaアプリです。ちょっと推測してください。それ以外に、プロファイラを使って何が起こっているのかを調べることができます。 – jefflunt

答えて

0

あなたのコードに関する追加の詳細がなくて、私は問題を分析するためにプロファイラを使用してお勧めします。私はあなたのキットとNetBeansで利用できるものがとても良いことを知っています。

アプリプロファイラからあなたを実行したら、最初に、アプリケーションのパッケージによって作成されたオブジェクトとリスナーをご覧ください。そこに問題がなければ、制御不能になっているものを特定してからそれらのエンティティを処理するコードを見るまで、他のパッケージに検索を展開することができます。

あなたは複数回のコードの特定の部分を実行し、まだそのコードが実行を停止した後、あなたは漏れがあるかもしれないし、終了時に変数/リスナーをゼロまたは空に検討することができるメモリの使用率を参照してください。

は、それは良い出発点であってもよいが、戻ってあなたの結果を報告してください、私たちはそれが行く方法を知っている必要があります。ところで、どのオペレーティングシステムを使用していますか、どのJavaのバージョンですか?

--Luiz

0

あなたが正確な答えを得るためにあなたのコードをプロファイリングする必要がありますが、私は似たものを見るとき、私の経験から、私は多くの場合、ガベージコレクションにそれを同一視します。たとえば、私は同じ仕事をして、10ギガともう1ギグを1つの仕事に捧げました。両方が走って完了しましたが、10ギグスはもっと多くの記憶を使っていました。まだ完了していますが、メモリを少なくしてもう少し時間がかかりました。私はちょっとJavaに新しいので、おそらくガベージコレクションを想定していますが、あなたが話していることを見てきました。

あなたは...(のjavaに含まれてjconsoleを、あるいはVisualVMのをチェックしてください)最も独特な音

0

をあなたのコードをプロファイリングする必要があります。

は、私は2つの可能な説明と考えることができます:あなたは間違っjavaw.exeインスタンスを見

  • 。おそらく、あなたはEclipseを実行しているインスタンスを見ていたでしょう。これは、それが大きくても大きくなる可能性があります。

  • あなたが(何らかの形で)デフォルトでは、大きなヒープで実行するためにJavaを設定するために管理しています。 Linuxでは、これをラッパースクリプト、シェル関数、またはシェルエイリアスで行うことができます。あなたは少なくともそれらのWindowsの最初のものを行うことができます。

私はそれがJARファイルではないと思います。 AFAIKでは、JARファイルをJARファイルに設定することはできません。何らかの形でJARファイルに別のバージョンのものが含まれている可能性はありますが、それは少しばかりです...

これらのアイデアが役に立たない場合は、プロファイリングをお試しください。


問題が見つかりました。 whileループのある時点で、新しいBufferedImageインスタンスが作成された場所で、同じBufferedImageを置き換えます。

ああはい。 BufferedImageは、大量のヒープ外メモリを使用し、注意深く管理する必要があります。

しかし、これは、アプリケーションが別のことをするように指示していない限り、アプリケーションがJARから実行したときにEclipseから起動したときよりも多くのメモリを使用した理由を説明していません。

関連する問題