ホームページ > Java > &#&チュートリアル > Java のヒープおよびスタック メモリ エラー

Java のヒープおよびスタック メモリ エラー

PHPz
リリース: 2023-09-01 20:09:11
転載
1272 人が閲覧しました

Java のヒープおよびスタック メモリ エラー

Java では、実行中のプログラムのすべてのインターフェイス、クラス、オブジェクト、変数、およびメソッドは、コンピューターのメモリ内の異なる場所に保存されます。ヒープは、実行時に変数、メソッド、クラスの値が保存されるメモリ領域の一部です。その割り当ては動的に行われ、アプリケーションのニーズに基づいて拡大または縮小できます。一方、参照変数、メソッド、クラスの名前はスタックメモリ領域に格納されます。ただし、何らかの理由でその割り当てが正しく処理されないと、この記事で説明するメモリ エラーが発生する可能性があります。

スタック関連のエラー

プロセスが開始されるたびに、固定スタック サイズが自動的に定義されます。各メソッド呼び出し中に、呼び出しフレームが呼び出しスタック上に作成され、メソッド呼び出しが終了するまで存続します。コンピューターのメモリのスタック領域に新しいスタック フレームを入れる余地が残っていない場合、StackOverflowError が発生します。

例 1

次の例は StackOverflowError を示しています

リーリー ###出力### リーリー

例 1 のコードの出力を見るとわかるように、StackOverflowError を受け取りました。ここでは、「methodA」と「methodB」という名前の 2 つのパラメーター化されたユーザー定義メソッドを作成しました。 main メソッドでは、整数変数「n1」を宣言して 0 に初期化し、パラメータ「n1」を指定して「methodA」を呼び出します。ここで、「methodA」は「methodB」を呼び出し、「n1」の値をインクリメントします。同様に、「methodB」は「methodA」を呼び出し、このプロセスが複数回繰り返されます。したがって、ある時点で、このプログラム用に作成されたスタック サイズが枯渇し、次のエラーが発生します。

StackOverflowError を処理するには、次の措置を講じることができます。

    繰り返しメソッドに適切な終了条件を提供します
  • ローカル変数または配列のサイズを減らすことも役立つ場合があります。
  • コードをリファクタリングして、無限のメソッド呼び出しを回避します。
  • 例 2

次に、この例を使用して、StackOverflowError の解決策を見つけてみましょう。 前の例で起こりました。

リーリー ###出力### リーリー

例 1 のコードの問題は、6 行目と 10 行目が終了しないことです。ただし、上記の例では、プログラムを終了し、「mult」に格納されている値を出力するステートメントを指定しました。

ヒープ関連のエラー

JVM の「-Xmx」および「-Xms」プロパティによってヒープのサイズが決まります。このサイズは値の保存に影響します。ヒープ メモリの一部にスペースが不足しているために JVM で値の割り当ての問題が発生すると、

OutOfMemoryError

が発生します。

例 1 次の例は、OutOfMemoryError を示しています。

リーリー ###出力### リーリー

上記のコードでは、割り当てたサイズがヒープ サイズより大きいため、OutOfMemoryError が発生します。

OutOfMemoryError への対処としては、以下のような対策が考えられます。

-Xmx および -Xms JVM オプションを使用してヒープ サイズを増やすことができます

    アプリケーションの動作に適したガベージ コレクターを使用することも役立つ場合があります。
  • 例 2
  • 次の例は、try ブロックと catch ブロックを使用して OutOfMemoryError を処理する方法を示しています。

    リーリー ###出力### リーリー ###結論は###
  • この記事では、まず、すべての Java プログラムに必要な 2 つのメモリ空間について説明します。後のセクションでは、ヒープ メモリとスタック メモリに関連するエラーについて説明します

以上がJava のヒープおよびスタック メモリ エラーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート