検索

ホームページ  >  に質問  >  本文

作为java项目OutOfMemoryError怎么处理,不是javaweb,不是tomcat溢出?

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

PHPzPHPz2917日前443

全員に返信(4)返信します

  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:37:28

    私は @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
  • PHP中文网

    PHP中文网2017-04-18 09:37:28

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

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

    返事
    0
  • ringa_lee

    ringa_lee2017-04-18 09:37:28

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

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:37:28

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

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

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

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

    返事
    0
  • キャンセル返事