建築的思考
環境
設定nginx設定1.1 JDK、JRE、JVMの間の関係は何ですか?
JVMとは何ですか?
英語名(Java仮想マシン)はJava仮想マシンです。これは.classタイプのファイルのみを認識します。クラスファイル内のバイトコード命令を認識し、オペレーティングシステムの上位APIを呼び出してアクションを完了することができます。
JREとは
英語名(Javaランタイム環境)、Javaランタイム環境。それは主に2つの部分を含みます:JVMの標準実装とJavaのいくつかの基本的なクラスライブラリ。JVMに比べて、JREにはJavaクラスライブラリの一部があります。
JDKとは 英語名(Java開発キット)、Java開発キット。JDKはJava開発全体の中核であり、JREといくつかの使いやすいガジェットを統合します。たとえば、javac.exe、java.exe、jar.exeなどです。
3つの関係:ネストされた関係。JDK> JRE> JVM。
1.2 JVMのメモリモデルとパーティション分割の状況と役割
以下に示すように:
ここに画像の説明を入力してください
黄色の部分はスレッドによって共有され、青い部分はスレッドによってプライベートです。
メソッドエリア
仮想マシンによってロードされたクラス情報、定数、静的変数などのデータを格納するために使用されます。
ヒープ
オブジェクトインスタンスを格納し、すべてのオブジェクトと配列をヒープに割り当てる必要があります。これは、JVMが管理する最大のメモリ領域です。
積み重ね
Javaメソッド実行のメモリモデル:ローカル変数テーブル、オペランドスタック、ダイナミックリンク、メソッド出口およびその他の情報を格納します。ライフサイクルはスレッドと同じです。
ネイティブメソッドスタック
この機能は仮想マシンスタックに似ていますが、ローカルメソッドスタックがネイティブメソッドの実行を提供し、仮想マシンスタックが仮想マシンによって実行されるJavaメソッドを提供する点が異なります。
プログラムカウンター
現在のスレッドによって実行された行番号インジケータ。JVMメモリ領域の最小領域です。バイトコード作業を実行するとき、プログラムカウンターを使用して、実行する次のバイトコード命令を選択します。
1.3 JVMオブジェクト作成のプロセスフローはどのようなものですか?
全体的なプロセスを以下に示します。
ここに画像の説明を入力してください
ステップ1:仮想マシンが新しい命令に遭遇すると、仮想マシンはまずこの命令のパラメーターが定数プール内でこのクラスのシンボル参照を見つけられるかどうかを確認し、このシンボルによって参照されるクラスがロードおよび解決および初期化されているかどうかを確認します。
ステップ2:クラスがすでにロードされている場合は、ステップ3に進み、ロードされていない場合は、まずクラスをロードする必要があります。
ステップ3:クラスローディングチェックに合格した後、次のステップは新生オブジェクトにメモリを割り当てることです。
ステップ4:オブジェクトの生成に必要なメモリサイズは、クラスのロードが完了した後で完全に決定できますオブジェクトにスペースを割り当てることは、Javaヒープから特定のサイズのメモリを分割することと同じです
ステップ5:メモリサイズは2つのケースに分けられます:最初のケース:JVMメモリは通常であり、すべての使用済みメモリが一方に置かれ、空きメモリがもう一方にあり、ポインタが境界点として中央に置かれますインジケータ。次に、現時点では、ポインタがオブジェクトのサイズに等しい距離だけ空き領域に移動する限り、メモリの割り当ては比較的簡単です。これが「ポインタ衝突」です。
2番目のケース:JVMのメモリは定期的ではありません。つまり、使用済みメモリと未使用メモリが交互に配置されます。現時点では、修正衝突を利用する方法はありません。現時点では、使用可能なメモリを記録するためのテーブルを維持する必要があります。割り当てるときは、リストからオブジェクトインスタンスに割り当てるのに十分な大きさのスペースを見つけ、それをレコードテーブルに更新します。
ステップ6:スペースアプリケーションが完了した後、JVMはメモリスペースを値0に初期化する必要があります。TLABを使用する場合、TLABが割り当てられているときにこの作業を行うことができます。
ステップ7:JVMはオブジェクトに必要な設定を行います。たとえば、オブジェクトは、クラスのインスタンス、オブジェクトのハッシュコード、GCの経過時間などの情報です。
ステップ8:上記のステップを完了すると、JVMからオブジェクトは基本的に完成しますが、Javaプログラムコードの観点からは、オブジェクトの作成が始まったばかりなので、プログラムで設定された初期化に従って<init>メソッドを実行する必要があります操作の初期化。今回は実際のプログラムオブジェクトが生成されます。
1.4ガベージコレクションアルゴリズムには何種類ありますか?それらの長所と短所は何ですか?
一般的なガベージコレクションアルゴリズムは次のとおりです。
マーククリアアルゴリズム、コピーアルゴリズム、マークソートアルゴリズム、世代別コレクションアルゴリズム
マークスイープアルゴリズム
マーキングクリアアルゴリズムには、「マーキング」と「クリア」の2つの段階があります。マーキングフェーズ:回復するすべてのオブジェクトを識別し、それらにマークを付けます。消去フェーズ:マーキングフェーズで使用できないオブジェクトを消去します。
短所:
マーキングと削除は効率的ではありません。
大量のがれきが発生し、リサイクルが頻繁になります。
複製アルゴリズム
メモリは同じサイズの2つのブロックに分割され、そのうちの1つはガベージコレクション時にライブオブジェクトが別のブロックにコピーされ、次にこのブロックが使用されます。