Interstage

 

Javaヒープ領域について

Javaヒープとシステムのメモリ領域

Javaプログラムを実行しているとJavaヒープ領域に余裕があるににもかかわらずメモリ不足、またはリソース不足になる場合があります。その場合の原因と対処方法を以下に示します。

  • 動作中のスレッドの数が多すぎる

    Windows 版の JavaVM では、Java のスレッドは Windows のスレッド API を用いて実装されています。
    Windows上では使用できるスレッドの数にはプロセスあるいはシステム全体での上限があり、それを超えると OutOfMemoryError が発生します。
    このような状況になった場合には、アプリケーションで使用するスレッドの数を減らすようにしてください。

  • Windows のリソースを消費するオブジェクトを大量に使用している

    次のオブジェクトが Windows のリソースを消費します。

    • ヘビーウェイトの GUI 部品( Java の AWT 部品)
      AWT の Button や Label などのヘビーウェイト部品は、Windows のウィンドウを用いて実装されています。

    • グラフィックオブジェクト( java.awt.Graphics クラスのオブジェクト)
      AWT のグラフィックオブジェクトは、Windows のデバイスコンテキストを用いて実装されています。

    • (1.1系の JavaVM のみ)イメージオブジェクト( java.awt.Image クラスのオブジェクト)
      1.1系の JavaVM では、AWT のイメージオブジェクトは、Windows のビットマップを用いて実装されています。

     

    WindowsNT4.0 / 2000 の場合には、これらのリソースは JavaVM のヒープ領域ではなく、マシンの空きメモリ上に確保されます(下図“空き領域”部)。

    マシンの全メモリ

    OSの使用領域

    同時に実行している他のアプリの使用領域

    JavaVMの使用領域


    空き領域

    インタプリタの使用領域

    JavaVMのヒープに割り当てられた領域

    [ JavaVM 実行時のマシンのメモリ使用状況]

    このため、JavaVM のヒープ領域に余裕があってもシステムの空きメモリ領域がないとこれらのオブジェクトは作成できなくなります。

    Windows95 / 98 の場合には、Windows のウィンドウとデバイスコンテキストはシステムリソース上に、ビットマップは GDI リソース上に確保されます。
    使用できるシステムリソースと GDI リソースの量は OS 全体で上限が決められていますので、その上限を超えるとこれらのオブジェクトは作成できなくなります。
    ( Windows95 / 98 でのリソースの使用状況は OS 添付のリソースメータを用いて確認できます)

     

    元のページへ戻る ページの先頭へ