Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaのStackOverflowErrorとOutOfMemoryErrorの違いは何ですか?


Javaプログラムを実行するたびに、オペレーティングシステムはJVMにメモリを割り当てます。 JVMは、このメモリを2つの部分に分割します。 1つはスタックメモリで、もう1つはヒープメモリです。スタックはメソッドの実行に使用され、ヒープはオブジェクトの格納に使用されます。スタックがいっぱいになると、JVMはjava.lang.StackOverflowErrorをスローし、ヒープがいっぱいになると、JVMはjava.lang.OutOfMemoryErrorをスローします。

StackOverflowError

  • スタックはメソッドの実行に使用されます。メソッド呼び出しごとに、スタックメモリに1つのブロックが作成されます
  • パラメータ、ローカル変数、オブジェクトへの参照などのメソッドに関連するデータは、このブロックに保存されます。
  • メソッドの実行が終了すると、このブロックは、そこに格納されているデータとともにスタックから削除されます。
  • メソッドを呼び出すときは常に、実行を終了してスタックメモリを離れる必要があります。
  • メソッドがスタックに残っている場合、スタックはいっぱいになり、JVMはjava.lang.StackOverflowErrorをスローします。

OutOfMemoryError

  • Javaで作成したオブジェクトは、ヒープメモリに保存されます。オブジェクトが不要になったら、メモリから削除する必要があります。
  • ガベージコレクタは、ヒープメモリから不要なオブジェクトを削除します。
  • オブジェクトにライブ参照がある場合、ガベージコレクタはそれらを削除しません。ライブ参照がないオブジェクトのみが削除されます。
  • メソッドを呼び出すときは常に、実行を終了してスタックメモリを離れる必要があります。
  • ヒープメモリに新しいオブジェクト用のスペースが残っていない場合、JVMはjava.lang.OutOfMemoryErrorをスローします。

  1. JavaのJFrameとJDialogの違いは何ですか?

    JFrame フレームに追加されたコンポーネントはそのコンテンツと呼ばれ、 contentPaneによって管理されます。 。 JFrameにコンポーネントを追加するには 、 contentPaneを使用する必要があります 代わりに。 JFrame タイトルのウィンドウが含まれています 、境界線 、(オプション)メニュー バー およびユーザー -指定 コンポーネント 。 JFrame 移動できます 、サイズ変更 、アイコン化 JComponentのサブクラスではありません 。 デフォルトでは、JFrameは左上の角に表示されます 画面のr。指定した場所にフレームを表示するには

  2. JavaのGridLayoutとGridBagLayoutの違いは何ですか?

    GridLayout すべてのコンポーネントを長方形のグリッドに配置し、同じサイズの長方形に分割します 各コンポーネントは長方形の中に配置されますが、 GridBagLayout 柔軟です レイアウト マネージャー コンポーネントを垂直方向と水平方向に整列させます コンポーネントが同じサイズである必要はありません。各GridBagLayout オブジェクトは、動的な長方形のセルのグリッドを維持します 各コンポーネントがコンポーネントと呼ばれる1つ以上のセルを占有します 表示 エリア 。 GridLayout GridLayout コンポーネントを長方形のグリッドに配置します。セル