javaのjvmキャリア例


javaの学習の中で、jvmモジュールに対して私達は絶えずいくつかの知識点を補充することができて、結局jvmは比較的に重要な1つの構成部分です。本編ではjvmのキャリアをめぐって紹介していますが、ローディングの際には、私達のキャリアは一つずつ作業しています。具体的なキャリアタイプについては、まだよく分かりません。javaのjvmキャリアの4つのタイプについて紹介します。
1、Bootstrap Class Loader(ガイドクラスキャリア)
JAVA_をロードしますHOMEの中でjre/lib/rt.jarのすべてのクラスは、C++によって実現されるコアライブラリ、つまりJVMは、各システムのAPIを呼び出してシステム機能を実現し、プラットフォームを跨ぐ主要モジュールを実現します。Class Loaderクラスではありません。開発者は直接使用できません。
2、Extension Class Loader(拡張類キャリア)
Javaプラットフォームの拡張機能のいくつかのjarパッケージをロードします。JAVA_を含みます。ホームにあるjre/lib/*.jarまたは-Djava.ext.dirsのディレクトリにあるjarパッケージは、開発者が直接使用することができます。
3、Application Class Loader(アプリケーションローディング)
classipathで指定されたjarパッケージとディレクトリのクラスを記録します。必要に応じて、classの全限定名来ローディングクラスを通じて、class Loader.get System Class Loader()によって獲得できます。
4、Custom Class Loader(ユーザキャリア)
アプリケーションに属して自分の需要に応じてカスタマイズしたクラスリーダーで、java.lang.classLoader類を継承します。tomcat、jbossのように、J 2 eeの規定によって、Class Loaderを実現します。
インスタンス拡張:
根類キャリア(BootstraphLoader)

package jvmTest;

import java.net.URL;

import sun.misc.Launcher;

public class Boot {
  public static void main(String[] args) {
    /*
     *         Access restriction: The type 'Launcher' is not API
     *          Project>preferences>java>Compiler>Errors/Warnings>
     *     【Deprecated and restricted API>Forbidden reference Error】  【Warning】.
     */
    URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs();
    for(int i = 0; i < urls.length; i++) {
      System.out.println(urls[i].toExternalForm());
    }
  }
}
クラスがロードされた後、システムは対応するクラスのオブジェクトを生成し、接続フェーズに入り、クラスのバイナリデータをJREに統合することになります。クラスの接続は次の3つの段階に分けられます。
検証:検証段階は、ロードされたクラスに正しい内部構造があるかどうかを確認し、他のクラスと協調します。JavaはC++言語に対して安全な言語です。例えば、C++を持たない配列の境界を越える検査があります。それ自体は自分の安全を守るためのものです。検証段階はJavaの非常に重要な段階であり、直接的に応用が悪意によって侵入されるかどうかを保証する重要な防御線であり、厳格な検証体制があればあるほど安全である。検証の目的は、Classファイルのバイトストリームに含まれる情報が現在の仮想マシンの要求に合致しており、仮想マシン自体の安全を損なうことがないように確保することである。主に4つの検証、ファイル形式の検証、メタデータの検証、バイトコードの検証、シンボル参照の検証を含む。
四つの検証をさらに説明する:
  • ファイルフォーマットの検証:主に、バイトストリームがClassファイルフォーマット仕様に適合しているかどうかを検証し、現在の仮想マシンによって処理をロードすることができる。例えば、メインバージョン番号は現在の仮想マシン処理の範囲内にあるか。常量池にはサポートされていない定数タイプがありますか?定数の中のインデックス値には存在しない定数があるかどうか、またはタイプに合わない定数がありますか?
  • メタデータ検証:バイトコード記述の情報を意味解析し、Javaの言語文法の仕様に合致しているかどうかを分析する。
  • バイトコードの検証:最も重要な検証環節は、データストリームと制御を分析し、意味が合法的で論理的であることを決定する。主なメタデータに対して検証した後、相手の法体の検証。保証類の方法は運行時に危害が発生しない。
  • 記号引用検証:主に記号参照に対して直接参照に変換する場合、第三の解析段階に拡張され、主にアクセスの種類などが参照に関連する場合、主に参照が必ずアクセスされ、クラスなどのアクセスできない問題がないことを保証する。
  • ここで、javaのjvmキャリア例についての記事を紹介します。javaのjvmキャリアに関しては、いくつかの内容があります。以前の文章を検索してください。または、下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。