JVMの操作機構との原則

、JVMのライフサイクル

JavaのJVMは、プログラムの先頭に付随して、開始、停止、プログラムの終了。Javaプログラムは、JVMプロセスを開き、1台のコンピュータ上で複数のプログラムを実行することができ、複数のJVMプロセスを実行することができます。

通常の糸と糸のガード:JVMのスレッドが2種類に分かれています。デーモンスレッドは、このようなガベージコレクション(GC)などのJVM内のスレッド独自の使用、です。一般的な共通のスレッドがある限り、JVMの実装に共通のスレッドがあるとして、JVMが停止しません、Javaプログラムを通されます。

二、JVMの起動プロセス

三、JVMアーキテクチャ

 

四、JVMのメモリ・モデル

JVMメモリモデルは、ヒープメモリ、メソッド領域、プログラムカウンタ、ネイティブメソッドからなる仮想マシンのスタックとスタックから成ります。ヒープおよびメソッド領域は、すべてのスレッドで共有され、仮想マシン・スタック、ネイティブメソッドスタックとプログラムカウンタは、スレッドプライベートです。

1、ヒープメモリ

ヒープメモリは、本番環境でのメモリのパフォーマンス・チューニングの重要な要素、メカニズムとアルゴリズムメモリの回復の数の主な内容です。

図2に示すように、メソッド領域

クラス情報は、仮想マシンは、定数、静的変数、時間のコンパイル(JIT)コードやその他のデータをロードされた格納するために使用されます。

3、プログラムカウンタ

JVMバイトコードインタプリタの概念モデルで実行されるべき次のバイトコード命令を選択するために、カウンタの値を変更することによって動作しています。ブランチ、ループ、ジャンプ、例外処理、スレッドの履歴書およびその他の基本的な機能は、完了するために、カウンターに依存する必要があります。

4、Java仮想マシン・スタック

仮想マシンのスタックのJavaメモリ・モデルを実行記載の方法であって、ローカル変数を格納するためのテーブルを行いながら各メソッドは、スタックフレーム(スタック・フレーム)を作成する(ローカル変数テーブルメモリは、コンパイル時に必要なように同定しますこの方法は、動作の大きさ)、情報オペランドスタック、動的リンク、方法エクスポート中に変化しません。

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

プログラム中のコールまたはJVMネイティブメソッドインタフェース(ネイティブ)が有効になったときに呼び出します。

五、Javaのクラスローディング機構

メソッド領域におけるランタイムデータ領域、メモリ内にクラスの.classファイルを読み取るにバイナリデータをロードするクラスを指し、そしてその後のヒープ領域内のjava.lang.Classオブジェクトを作成カプセル化クラスのデータ構造領域の方法。最終製品がロードされたクラスのクラスオブジェクトをスタック領域に位置している、クラスオブジェクトは、メソッド領域のデータ構造クラスをカプセル化し、そしてJavaプログラマに領域のデータ構造のためのインタフェースアクセス方法を提供します。

クラスのロード処理:

1、ローディング

  1)バイナリバイトストリームのクラスで定義された完全修飾名を取得します。

  2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。

  3)在Java堆中生成一个代表这个类的java.lang.Class对象,作为对方法区中这些数据的访问入口。

2、链接。

  验证:确保被加载的类的正确性

  准备:为类的静态变量分配内存,并将其初始化为默认值

  解析:把类中的符号引用转换为直接引用

3、初始化

为类的静态变量赋予正确的初始值,JVM负责对类进行初始化,主要对类变量进行初始化。

Java中对类变量进行初始值设定的两种方式:

  1)声明类变量是指定初始值

  2)使用静态代码块为类变量指定初始值

おすすめ

転載: www.cnblogs.com/kingshine007/p/11432043.html