ホームページ  >  記事  >  Java  >  JVM の高度な機能 -- Java メモリ構造領域の概要

JVM の高度な機能 -- Java メモリ構造領域の概要

巴扎黑
巴扎黑オリジナル
2017-06-26 10:21:501671ブラウズ

領域分割:

プログラムの実行中、Java 仮想マシンは、以下に示すように、メモリをさまざまな機能を持ついくつかの領域に分割します。

この図は、さまざまなメモリ分割領域をリストしています。

スレッドプライベート: プログラムカウンター、仮想マシンスタック、ローカルメソッドスタック

スレッド共有: ヒープ、メソッド領域

以下、各領域の機能と機能を一つずつ紹介します

プログラムカウンター:

1. プログラムカウンタは主に実行中のバイトコード行番号を指すために使用され、各スレッドは個別のプログラムカウンタを持ち、互いに共有されません。プログラムは、指されるバイトコード行番号を変更することによって実行されます。このカウンタによって

2. ループ、ジャンプ、例外処理などのメカニズムはすべて、このカウンタに依存して完了します

3. プログラムが Java プログラムを実行する場合、実行されるバイトコードを指します。メソッドが実行されると、その値は空になります

Java 仮想マシン スタック:

1. 仮想マシン スタックは、実行時にローカル変数を格納するためにスタック フレームを作成します。 table.、メソッド出口、ダイナミックリンク、オペランドスタックなどの情報、

2.各メソッドの実行プロセスは、スタッキングからポップまでの仮想マシンスタックのプロセスです

よくJavaメモリはヒープメモリに分割されていると言われることが多いです。そして、スタックメモリとは、スタックメモリとは、上記の仮想マシンスタックを指します

主に基本的なデータ型(intbytecharlongなど)、オブジェクト参照、コンパイラに知られている戻りアドレス型を格納するローカル変数テーブル

拡張子:

オブジェクト参照(reference): オブジェクトそのものではなく、オブジェクトの開始アドレスを指す参照ポインタである場合もあれば、オブジェクトやその他の関連する場所を表すハンドルである場合もあります

ReturnAddress: ではありませんJava API に入力すると、それは私たちが望むものになることはできません。 Call は、バイトコード命令のアドレスを指します

ネイティブ メソッド スタック

仮想マシン スタックと同様に、サービスを提供するメモリですネイティブメソッド

Java ヒープ

ヒープメモリは、オブジェクトを保存することが主な目的であり、ガベージコレクタによって管理される主要な領域でもあります

Java ヒープは新しいものに分割されます。具体的なガベージ コレクションのメカニズムについては、次の記事で紹介します



メソッド領域(非ヒープとも呼ばれます)

)。保管するロードされたクラス情報、定数、静的変数、ジャストインタイムコンパイラによってコンパイルされたコードなど ランタイム定数プール:メソッド領域の一部であり、コンパイラによって生成されたさまざまなリテラルやシンボリック参照を保存するために使用されます

ダイレクトメモリ:

仮想マシンランタイムデータ領域の一部ではなく、JVMによって管理されるメモリに属しません NIOでは、ネイティブ関数を使用してダイレクトメモリを直接割り当てることができますを作成し、このメモリへの参照として Java の DirectByteBuffer オブジェクトを通じて操作します

利点: メモリコピーの手順が省略され、効率が向上します

欠点: 制御が難しい、メモリリークを引き起こしやすい

以上がJVM の高度な機能 -- Java メモリ構造領域の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。