blog

Java - JVM

システムは主に3つのステップでクラスタイプのファイルをロードします。接続プロセスは、次の3つのステップに分けることができます。 仮想マシンが定数プール内のシンボリック参照を直接参照に置き換えるプロセス...

Dec 9, 2020 · 2 min. read
シェア

クラス・ロード・プロセス

接続 初期化。接続プロセスは、検証 準備 解析 の3つのステップに分けられます。

ロード

  • 完全なクラス名でサブクラスを定義するバイナリ・バイト・ストリームを取得します。
  • バイトストリームで表される静的ストレージ構造を、メソッドが移動するための実行時データ構造に変換します。
  • メソッド・エリアのこのデータへのアクセス・エントリー・ポイントとして、メモリ上のクラスを表すClassオブジェクトを生成します。

バリデーション

準備

クラス変数に割り当てられたメモリの正式な割り当てとクラス変数の初期値の設定

解析

仮想マシンが定数プール内のシンボリック参照を直接参照に置き換えるプロセス。

初期化

C++で実装されたトップレベルのロード・クラスは、%JAVA_HOME%/libディレクトリにあるjarパッケージとクラス、または-Xbootclasspathパラメータで指定されたパスにあるすべてのクラスをロードします。

  • ExtensionClassLoader (Extension Class Loader): 主に、jar パッケージとクラスの下にあるディレクトリ %JRE_HOME%/lib/ext ディレクトリ、または jar パッケージのパスで指定された java.ext.dirs システム変数によってロードする役割を果たします。
  • AppClassLoader(Application Class Loader) :ユーザー指向のローダーで、現在のアプリケーションのクラスパスをすべてのjarパッケージとクラスでロードします。
  • Read next

    <iOS知識体系> 属性キーワードと修飾子

    5.ぶら下がりポインタが生成される assign によって変更されたオブジェクトが解放された後も、ポインタはオブジェクトの元のアドレスを指しており、ポインタはぶら下がりポインタになります。このポインタを通して元のオブジェクトにアクセスし続けると、プログラムがクラッシュする可能性があります。 3.__weakと比較すると、オブジェクトがnilかどうかをチェックするためにweakテーブルをトラバースする必要がないため、パフォーマンスが向上します。しかし、ダングリングポインタが生成されます。

    Dec 9, 2020 · 4 min read