Javaのインタビュー - その答えの一部19

194 + 195 + 196 + 197

 

:Java仮想マシンは、以下の5つの領域に分割されて 
まず、メソッドエリア(AREA METHOD): 
時々この領域の永久的な世代のガベージコレクションとなっ1.まれですが、それはGCがここには存在しないという意味ではありませんGC法は、主の搬出及びタイプの定数プールの領域にある 
定数、変数、静的タイムコンパイラは、コードをコンパイルした後にメソッド領域2など、情報主に仮想マシンは、クラスデータをロードされた格納するために使用されます。 
前記領域は、スレッドで共有されています。 
この方法は、基準シンボルを生成するために、リテラルおよび静的コンパイラを記憶するためのゾーンの実行時定数プールを有しています。定数プールは、それが実行される定数プールの一定のプレゼンスを生成、コンパイル時に決定され、必ずしも一定ではなく、動的です。

メソッド領域は、個体は、Javaクラスのすべての情報をカプセル化していることがわかります

第二に、ヒープ(HEAP)
Javaヒープメモリのすべてのスレッドで共有されている仮想マシンが起動されたときに、ほぼすべてのオブジェクトインスタンスがここで作成されて作成され、この領域は、ガベージコレクションが発生することが多いです。

第三に、仮想マシンのスタック(JAVA STACK): 
1.仮想マシン・スタックは、我々は通常、メモリをスタック呼んで、それはJavaサービス方式で、それぞれの方法は、ローカル変数テーブルを格納するために使用される実行時のスタックフレームを作成します動的リンクエクスポートおよびその他の情報のために、オペランドスタック、および方法。 
2.仮想マシンのスレッドスタックは、そのライフサイクルと同じスレッドプライベートです。 
3.ローカル変数テーブルは、オブジェクトの開始アドレスへのポインタが存在し得ることを基本データ型、RETURNADDRESS型(バイトコード命令のアドレスを指す)、およびオブジェクト参照は、オブジェクト参照に格納され、オブジェクトが表すことができますハンドルは、オブジェクトまたは位置に関連します。コンパイラの間に必要なローカル変数のメモリ空間が決定 
インデックステーブルによってアクセスされるローカル変数は異なる演算のオペランドと結果を格納するオペランドスタックの主な機能4.が、スタックプッシュと実施例 
5.各スタックフレームは、実行時定数プール、参照関連メソッドのスタックフレームへのポインタを含む接続手順において、動的メソッド呼び出しをサポートするための参照を保持することである。動的リンクは、定数プール内のシンボル参照であります直接参照に遭遇します。

第四に、ローカルメソッド領域(NATIVE METHOD STACK)
ローカルエリアおよび仮想マシンのスタック方法と似ていますが、ネイティブメソッドは、ネイティブ方式(非Javaインターフェース言語コール)サービスにスタックします。

五、プログラム・カウンタ(PEOGRAM COUNTER REGISTER)
小さなメモリ空間、ニーズがバイトコードインタプリタ、分岐、ループ、分岐、例外処理や復旧スレッドの作業を実行するとき、バイトコード命令カウント値が選択されてもよい変更することにより、機能が完了し、このカウンタに依存する必要があります。メモリ領域は、任意の領域のOOMの状況を指定していないだけで、Java仮想マシン仕様です。

 

 

 JVMのヒープの場所に住んでいるときclassLoder開始、クラスローダ、それはあなたのハードディスク上のホストA.classに行くJVMのメソッド領域にロードされます。このエリアのバイトのファイルの方法は、新しい仮想マシンに使用されます次に、バイトコード()、およびオブジェクトヒープメモリのバイトコードを生成し、そのバイトコードは、2つのメモリ・ファイルは、オブジェクトへの参照クラス、独自のローディングクラスローダへのポインタを有しています

 

198親委譲モデルとは何ですか?

 

 

定義

親委任モデルに加えて、クラスローダの残りの部分は、自身の親クラスローダを持っている必要があり、トップレベルのブートローダーのクラスが必要です。

作業プロセスの親委譲モデルです。

  • クラスローダは、クラスが要求を受け取っロードする場合、それは最初にこのクラスをロードしようとするために所有していませんが、完了するために、親クラスローダにこの要求を委任します。
  • クラスローダの各レベルは真です。したがって、最終的にはすべてのロード要求は、ブートクラスローダのトップに転送する必要があります。
  • 親ローダフィードバックは、彼らが(検索がクラスを見つけることができません)読み込み要求を完了できない場合のみ、サブローダは、独自のをロードしようとします。

多くの人々言葉「親」非常に混乱。これは鍋,,,「親」の翻訳であるだけで「親が」直訳で、実際には、中国の母親と父親でなく、世代から世代へ、すなわち親を親の多くを意味するものではありません。

効果

任意のカテゴリについて、あなたはそれが仮想マシンでその独自性とクラスローダとクラス自体によって確立されたロードする必要があり、各クラスローダは、別のクラスの名前空間を持っています。そのため、クラスローダとの関係を整理するために、親委任モデルは、明白な利点があります:それは優先順位の階層と一緒にクラスローダを持つクラスとして。

このようなクラスとしてjava.lang.Object、それがブートクラスローダによってロードされます。任意の親クラスローダ委譲モデルを受け取ることを確認してくださいjava.lang.Objectロード要求を最終的にロードするために、ブートクラスローダの上部にモデルに割り当てられているので、Objectクラスの様々なクラスローダ環境プログラムで同じですクラス。

あなたがロードするjava.lang.Object上位というクラスと自己定義されたクラスローダを書かれている場合は逆に、ノー親委任モデルならば、自分の言葉をロードするために、各クラスローダによって、その後、システムが表示されます異なるクラスのオブジェクトの数、Javaの型システム、行動の最も基本的なアプリケーションがさらに混乱になり、保証されません。

 

おすすめ

転載: www.cnblogs.com/zhzJAVA11/p/11518975.html