第1週目のタスク


学習目標


Javaソースファイル(.java)をJVMとして実行する手順について説明します.

勉強する

  • JVM
  • とは
  • コンパイル方法
  • を実行する方法
  • バイトコード
  • とは
  • JITコンパイラとは、
  • JVMコンポーネント
  • JDKとJREの差
  • JVMとは?


    Java仮想マシンの略.従来のC言語で開発する場合、オペレーティングシステムごとに異なるコンパイルを提供する必要があり、JVMはシステムへの依存を減らすことができます.開発前に各オペレーティングシステムに適したJVMをインストールし、開発者はオペレーティングシステムに関心を持たずに開発を行うことで、開発者に便利を提供します.しかし,コードはJVMによって行われるため,性能面では損なわれる可能性があるが,開発の利便性は保証されている.

    コンパイル方法


    コンパイルは、javaコードなどのユーザが作成したコードをコンピュータが理解できる機械言語に変換するプロセスです.簡単に言えば.java.classに変換するプロセス.こちらです.classはバイトコードと呼ばれます.
    次はコンパイルするコードです.
    public class Test{
    	public static void main(String args[]) {
        	System.out.println("Hi");
        }
    }
    このjavaコードを保存するとき.Javaとして保存されます.そして今class(コンパイル)コンパイルに変更する方法は、javaを最初にインストールした後(jdkインストール)にパスに入り、binフォルダを検索することです.次にパスをcliに設定
    $javac [Test.java (이것은 자바 코드이름)]
    入力します.
    では.classを確認できます.

    実行方法


    上記の結果でテストします.classを確認したら、今
    $java[Test(これはファイル名)]
    Javaコマンドでファイルを実行します.
    運転後
    Hi
    コマンドウィンドウで確認できます

    バイトコードとは


    .java(javaファイル)が分かりやすい言語である場合.class(バイトコード)は、JVMがわかりやすい言語といえる.

    JITコンパイラは何ですか。どのように動作していますか。


    JITはJust in timeの略です.JVMのコンポーネントの1つである実行エンジンに含まれる要素.上に生成されたクラス・ローダは、クラス・バイト・コードを受信し、必要な準備プロセスを完了します.その後、実行エンジンが翻訳を開始します.
    ここではInterpreter,JITコンパイラ,GCの要素を適用した.interpreterはコンパイルされたバイトコードを実行します.しかし,我々がコードを記述する際には,繰り返しのコードや繰り返し呼び出しの関数がある可能性があり,最初のinterpreterが後で再実行を実行すると,最初の値がキャッシュに格納され,参照によって性能が向上するのがJITコンパイラの挙動といえる.

    JVMコンポーネント



    ソース:https://lazymankook.tistory.com/79
    上の図は、JVMコンポーネントの画像がネット上から持ち込まれていることを示しています.
    ソースコード:ユーザーによって書き込まれます.JAvaコード
    Compiler: javac.exe実行可能ファイル.java.classに変換するコード
    Byteコード:javacによって変換されます.クラスコード
    Garbage Collectorコードが実行されると、参照されなくなったデータのクリーンアップを担当します.
    Class Loaderでコンパイルされたバイトコードを読み込み、接続し、メモリに格納します.内部にはロード、リンク、初期化ステップがあります.
    エンジンクラスローダが準備した実行プロセスが実際に実行される場所(Interpreter、JIT Compiler、Garbage Collectorがあります).ランタイムデータ領域に割り当てられたバイトコード
    Runtime Data Areas JVMがプログラムを実行するためにオペレーティングシステムから個別に割り当てられたメモリ領域

    ソース:https://asfirstalways.tistory.com/158
    メソッドクラス情報または静的変数を格納し、アプリケーションコンテキストが共有する領域です.
    heap実行時に動的に割り当てられた領域.
    Stack Threadの開始時に作成し、対応するメソッド情報を格納します.
    PCレジスタPCレジスタは、現在実行中のJava virtualsystemコマンドのアドレスを格納する.Javaでは、Threadごとに個別のPCレジスタがあります.CPUはインストール中に必要な情報を記憶している.
    ネイティブメソッドネイティブメソッドスタックは、ネイティブライブラリに基づいてネイティブコードコマンドを保存します.Java以外の言語で書かれたNativeコードのスタックスペースです.

    JDKとJREの違い


    JDK
    Java開発キットの略はJavaアプリケーション開発環境です.ソースファイルコンパイラ、デバッガなどの開発ツールが含まれています.JRE(実行環境)の概念が含まれています.
    JRE
    Java Runtime Environmentの略はJavaアプリケーションの実行環境です.コンパイルされたモジュール(バイトコード、JARファイル)を実行できます.
    注意:
  • https://jeongjin984.github.io/posts/JVM/
  • https://github.com/league3236/startJava/blob/master/live_study/week1.md
  • https://sowhat4.tistory.com/61
  • https://github.com/yeo311/java-study-with-whiteship/tree/main/week1
  • https://gblee1987.tistory.com/173