JavaとJVMのメモリ
1750 ワード
JVMとは?
Java仮想マシン、Java仮想マシンの略字に基づいて生成されたJavaプログラムの読み込み操作を実行します.
Javaプログラム実行プロセス
Runtime Data Aare
プログラムを実行するためにJavaプログラムを実行する場合、JVMがオペレーティングシステムから割り当てたメモリ領域は大きく5つの空間に分けることができます.
単一スレッドの割当て
PC Register
-スレッドが開始されるたびに生成されるスペース
-スレッドが実行するコマンドの一部を記録します.
JVM Stacks
-スレッドが開始されるたびに生成されるスペース
-領域変数、パラメータ、戻り値および演算の一時値を格納する領域.
Native Method Area
-他のプログラミング言語で作成されるネイティブコードのメモリ領域
スレッド共有領域
Method Area
-クラスメンバー変数の名前、データ型、アクセス制御者情報などのフィールド情報、メソッドの名前、戻りタイプ、パラメータ、アクセス制御者情報などのメソッド情報、タイプ情報(インタフェースかクラスか)、Constant Pool(定数プール:文字定数、タイプ、フィールド、オブジェクト参照が保存されている)、静的変数、final class変数などの生成領域.
Heap
-スレッド全体と共有するスペース
-文字列をテキスト形式として宣言したときに作成されるString Pool領域があります.
-実際のデータを持つインスタンスと配列を格納します.
-Garbage Collectorメモリが参照されていない領域の特定と削除
例 class Person {
private int id;
private String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
int id = 1;
String name = "whybe";
Person person = null;
person = buildPerson(id, name);
}
private static Person buildPerson(int id, String name) {
return new Person(id, name);
}
}
class Person {
private int id;
private String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
int id = 1;
String name = "whybe";
Person person = null;
person = buildPerson(id, name);
}
private static Person buildPerson(int id, String name) {
return new Person(id, name);
}
}
Reference
この問題について(JavaとJVMのメモリ), 我々は、より多くの情報をここで見つけました https://velog.io/@hagyoung99/JavaMemoryテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol