作为java项目OutOfMemoryError怎么处理,不是javaweb,不是tomcat溢出?
PHPz
PHPz 2017-04-18 09:35:28
0
4
427

不是web项目,纯java项目
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

PHPz
PHPz

学习是最好的投资!

全員に返信(4)
伊谢尔伦

私は @Founder の意見に同意しません。また、OOM が発生するとすぐにヒープ メモリのサイズを変更し始める人も多く、ヒープ メモリの調整は必ずしも大きいほど良いわけではありません。

まず第一に、知識を広めてください:

  • ヒープ メモリは、新しい世代と古い世代に分割されます。新しい世代は、頻繁に GC が必要な オブジェクトを格納するために使用されます。 各オブジェクト インスタンスには、一定期間を超えて GC が行われていない場合は、古い世代に昇格して保存されます。

  • 旧世代のスペースは新世代よりも大きくなります。

  • OOM が発生すると、古い世代でメモリが不足します (新しい世代でメモリが不足すると、古い世代にメモリが配置されて保存されるため)。

次の方法で問題を分析して解決することをお勧めします:

1. コードを直接チェックして、コレクション内に無限ループや未解放の要素参照などのメモリ リークがないかどうかを確認します。

2. JVM パラメータ -XX:+HeapDumpOutOfMemoryError および -XX:HeapDumpPath=<你的path>

を設定します。

3. メモリ イメージ分析ツール (http://www.eclipse.org/mat/) を使用して、メモリ リーク または メモリ オーバーフロー が発生しているかどうかを分析します。次に、リークしたオブジェクトが GC ROOTS とどのように関連しているかを調べ、リークしたコードの場所を見つけます。

4. メモリ リークがない場合は、マシンの物理メモリを組み合わせて、ヒープ メモリ (-Xms および -Xmx) を増やし続けることができるかどうかを確認します。ヒープ メモリの設定は大きいほど良いことに注意してください。大きなメモリ上で FULL GC が発生すると、「stop the world」が長時間送信されるため、許容できません

いいねを押す +0
Ty80

簡単な解決策は、ヒープ サイズを調整することです
Eclilpse で起動パラメータを変更し、VM 引数に -Xms384m -Xmx384m を追加します
または
Tomcat の catalina.bat - Xmx384m に -Xms384m を追加します

ただし、コードを再度確認することをお勧めします

いいねを押す +0
左手右手慢动作

@letcheng も彼の意見に同意します。あなたは Web プロジェクトではなく、単なる Java プロジェクトです。ヒープ上にオブジェクトをいくつ作成して OOM を引き起こすことができますか?したがって、これは主にコードによるものです。
JDK の下には、組み込みの JConsole.exe ツールがあり、現在存在するオブジェクトの数、ヒープ メモリの量、OOM がいつ発生したかを確認できます。

いいねを押す +0
巴扎黑

この種の問題の場合は、findbug や sonar などのツールを使用してプログラムを実行し、メモリ オーバーフローにつながるメモリ リークのリスクがある箇所を確認することをお勧めします。

java.lang.OutOfMemoryError: Java ヒープ領域は、メモリ領域が使い果たされたときにスローされます。したがって、この問題は主に、作成されたメモリが使用できないことが原因です。最も一般的な IO クラスなど、使用後に xx.close()

を実行しないでください。

TOMCAT で大きなメモリを設定するだけでは十分ではありません。メモリ リークの問題が発生した場合、メモリがいくら大きくても役に立ちません。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート