ホームページ  >  記事  >  Java  >  JVM メモリ割り当て方法の概要

JVM メモリ割り当て方法の概要

青灯夜游
青灯夜游転載
2019-03-28 13:34:463607ブラウズ

この記事の内容は、JVM のメモリ割り当て方法を紹介するものであり、一定の参考値がありますので、困っている方は参考にしていただければ幸いです。

まえがき

この記事では、Java プログラムの実行時にメモリ割り当てがどのように実行されるかについて説明します。

Java 仮想マシンのコンパイル時には、次の 3 種類のメモリ ストレージがあります:

1、静的 (メソッド領域) ストレージ

2、stack type Storage

3,Heap storage

静的ストレージとは、データのストレージ要件をコンパイル中に決定し、その後固定量を決定する必要があることを意味します。メモリ、したがって静的ストレージでは、変数データが​​ストレージ スペースを決定しないため、変数データ構造を使用できません。

スタック ストレージは、静的ストレージとまったく逆です。コンパイル時時間、スタック ストレージ 指定されたストレージ データは不確実です。データが実際に実行されるときにのみわかります。その時点で、メモリ領域を割り当てることができます。

ヒープ ストレージはスタック ストレージと比較されます。データに割り当てるメモリ量を指定する必要がありますが、ヒープ ストレージは変数配列やオブジェクト インスタンスなどのデータ構造に必要なメモリ空間を決定できないため、ヒープは使用可能な大規模な領域で構成されます。ブロックと空きブロック

スタックとヒープ

静的ストレージは比較的単純なので、スタックとヒープの関係と違いの分析に重点を置きます。

違い :
スタック内のデータがそのスコープを超えると、そのデータは解放され、メモリは他のデータによって占有されます。
ヒープ内では、割り当てられたメモリは Java 仮想マシンの自動ガベージ コレクタによって管理されます。これらの Mutable 配列とオブジェクトは、それらを指す参照変数がない場合にはガベージになりますが、それでもメモリを占有しており、不確実な時期にガベージ コレクタによって解放されます。

##JVM インスタンスにはヒープ領域が 1 つだけあり、スタックには複数の

# リレーションシップを持つことができます。

ヒープ内にデータを作成した後、次のことを定義できます。スタック内の変数、この変数はヒープを指します 特定のデータ (データの最初のアドレスを指します)、つまり、この変数はヒープ内のデータの参照変数になります。ヒープ内のデータにアクセスするJavaのポインタです。
そして、各 Java アプリケーションには JVM インスタンスがあり、各インスタンスはヒープに対応します。このアプリケーションの実行中、すべてのクラス インスタンスと配列はこのヒープに配置され、オブジェクトの作成時にメモリが2 つの場所から割り当てられ、ヒープではオブジェクトの実際の値が割り当てられ、スタック (スタック、スタックとも呼ばれます) では、ヒープ内のオブジェクトのインデックスが割り当てられます

Stack(スタック)まずこの図を見てみましょう (まあ、非常に鮮明です)

JVM メモリ割り当て方法の概要JVM はベースになっていますスタック上 はい、新しいスレッドが作成されるたびにスタックが割り当てられます。これはフレームに基づいており、先入れ後出しの特性があります (理解するには図を参照してください)

Java メソッドが実行されるときアクティブ化されるとスタックに置かれます フレーム (これは

スタックへのプッシュです

) このメソッドの実行中、このフレームはデータを保存するために使用されます。 メソッドはスタックによって決定され、先入れ後出し形式のため、メソッドのネストが深くなるほど、スタックのメモリを解放するのが難しくなります。そのため、再帰的メソッドの使用はお勧めしません。

スタックのプッシュとポップの具体的な実装は以下に掲載されています

プッシュとポップを使用して文字列を反転します

String value = "test 1234567890";
StringBuffer result = new StringBuffer();
 
Stack stack = new Stack();
 
for(char c : value.toCharArray()) {
  stack.push(c);
}
 
while (!stack.empty()) {
  result.append(stack.pop());
}
 
value = result.toString();
関連ビデオ チュートリアルの推奨事項: 「

Java チュートリアル」

"

以上がこの記事の全内容です。皆様の学習のお役に立てれば幸いです。さらにエキサイティングなコンテンツについては、PHP 中国語 Web サイトの関連チュートリアルのコラムに注目してください。 ! !

以上がJVM メモリ割り当て方法の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。