メモリ構造JVM Javaの基本的な知識と一般的な面接の質問で

(1)が.sunのHotSpot VM、およびオープンJDKはJDKには、仮想マシンが付属している、現在最も広く使用されているJava仮想マシンです。
(2).JVMメモリ配布
ここに画像を挿入説明
プログラムカウンタは:小さなメモリ空間であり、行番号は、バイトコードが実行され、現在のスレッドの指標として見ることができます。プログラム支店、ループ、ジャンプ、例外処理、スレッドの履歴書やその他の基本的な機能、このカウンターに頼る必要は完了です。マルチスレッドモードのでようスレッドプライベートメモリ領域、スレッドによって交互に切り替えられ、割り当てられたプロセッサ実行時間が達成されます。
VMスタックは:Javaのメモリモデルは、ローカル変数テーブル、オペランドスタックを格納するために使用される実行方法を、記載されているダイナミックリンク方法輸出
**ヒープ:** Java仮想マシン管理におけるメモリの最大部分であり、 Javaヒープは、仮想マシンが起動し、ストレージインスタンスは、ガベージコレクタがメイン管理されたときに作成メモリ領域内のすべてのスレッドによって共有される
メソッド領域、店舗クラス情報を用い、定数、静的変数の仮想マシンにロードされているが。こうしたリアルタイムコンパイルなどのコードデータ。GC地域にもHotSVM、およびベースの主に一定のリサイクル
**(3)一般的な面接の質問

1. Q:スレッドで共有されているのスレッドにプライベートで、JVMのメモリ領域** ??
プライベートスレッド
プログラムカウンタ(プログラムカウンタレジスタ)
仮想スタックマシン(VMスタック)
ネイティブメソッドスタック(ネイティブメソッドスタック)

各スレッドが作成されている間JVMスタックは、作成された変数のローカルの基本的なタイプで、現在のスレッドのJVMスタックに保存されている
スレッドで共有
ヒープ(ヒープ)
JVMオブジェクトインスタンスおよびエリア内の値の配列を格納するために使用され、すべてのあなたは、Javaを考えることができますヒープメモリ内の新しい作成されたオブジェクトによって割り当てられ、このメモリオブジェクトに回復GCのを待つ
方法エリア(メソッドエリア)
ロードされたクラス情報の格納領域の方法(名前、修飾など)、クラス静的変数は、クラス、フィールドクラス情報クラスの情報を処理、定数の最終的なタイプとして定義されている
ダイレクトメモリ(非実行時のデータ領域の部分)

2. Q:JVMメモリ割り当て戦略
A:メモリ割り当てオブジェクトは、一般的な方向に、Javaヒープに割り当てられています。
ほとんどの場合、エデンエリア内のオブジェクトの割り当ての新世代は、エデン地区は、割り当てられた十分なスペースがない場合、仮想マシンはマイナーGCを起動します。
ほとんどの場合、大きなオブジェクトが、直接、古い時代に、仮想マシンはラージオブジェクトのしきい値を定義するためのパラメータを提供し、オブジェクトは、古い時代に入るのしきい値の真上になります。
まだ生きている複数のマイナーGC後のオブジェクト(オブジェクトの長期生存)した後、我々は古い時代に入ります。VMパラメータを提供し、あなたは、しきい値を設定することができます。

3. Q:どのようにJVMのチューニング?
A:1が即時ガベージコレクションを提供する。
でヒープビュー機能は、我々は一般的に成功し、次の問題に対処することができます
-若い世代の格差の旧世代のサイズが合理的である
-メモリリークを
-ガベージコレクションのアルゴリズムセットは、合理的である
、ヒープ領域の割り当てを表示する(若い世代、旧世代を、恒久的な発生分布)
ガベージコレクションは、モニタリング(長期の回復を監視)
システムスレッド数:スレッド情報監視
スレッドの状態が監視:何の各スレッド状態の種類の下に
スレッドの詳細:内部スレッドの動作を確認し、チェックデッドロック
CPUのホットスポットを:手段は、CPU時間をたくさん取ってシステムチェック
メモリのホットスポットを:チェックをどのようなシステムでのオブジェクトの最大数

?メモリリークの4例
A:あなたがオブジェクトを作成し、そのオブジェクトが使用されていないが、このターゲットは、それが無用につながる適用されていると仮定し、それを回復することはないだろう

5.jvmヒープとスタックの違いは何ですか?それぞれの目的を説明してください?
スタックメモリは、プログラム、メソッドに入る意味ローカル変数は、この方法の方法のための別個の内部ストレージのプライベートメモリ空間に属する割り当てる
この方法の終わりに、このメソッドに割り当てられたスタックは、スタックを解放する場合変数も解放します。
ヒープ及びスタック効果は、一般的に、現在のメソッドスタックにないデータを格納するために使用される、異なるメモリであり、
それはプロセスの終了と消えないように、例えば、新しいオブジェクトの使用は、ヒープ上に作成されます。最終的な修正方法で使用されるローカル変数後、ヒープ上で、代わりにスタック。

?特定の分析6.jvmヒープ
A:若い世代:すべての新しく作成されたオブジェクトが最初に若い世代を配置しています。若い世代の目標は、これらのオブジェクトの短いライフサイクル、クイックOFFとして収集するためにある
古い年:経験のあるオブジェクトN回(設定可能)ガベージコレクション、それは古い世代にコピーされます、若い世代ではまだ生きています。したがって、オブジェクトの長いライフサイクルの一部に格納されている旧世代と考えられています。
全GCで旧世代のためのガベージコレクション。
永久世代:タイプなどJavaクラス、メソッド、などの静的データを格納するために使用しました

?の7JAVAクラスのライフサイクル
7つのステージをアンロード、ロード、検証、準備、解析し、初期設定、使用:Javaクラスを含むメモリ、そのライフサイクル全体を、アンロードするまで、仮想マシンのメモリにロードされ始めます。
荷積:クラスファイルから取得し、JVMメモリ(メソッド領域、一定領域)の内部にロードインフォメーション。
検証:読み取り構造記述言語仕様とJava JVMの仕様かどうかをチェックします。これは、最も複雑なクラスローディングプロセスであり、時間は最長かかります。ほとんどのユースケースとシナリオJVM TCKツールは、エラーが間違った授業時間をロードして発生するかどうかをテストするために使用されます。
調製:配布情報記憶クラス構造が使用され、この構造は、クラス、メソッド、およびインタフェース情報で定義されたメンバ変数を含んでいます。
解決:直接参照に変更クラスの定数プール参照のすべてのシンボル。
初期化:クラス変数を適切な値に初期化されます。静的な初期化手順を実行し、静的変数は、指定された値に初期化されます。

8. GCとは何ですか?
GCは、ガベージコレクション手段(Gabageコレクション)で、メモリ処理が問題になりやすいプログラマは、どこで
忘れたり、メモリのエラー回復手順が不安定になる、あるいはシステムの崩壊ができ、提供されているJava GC機能が自動的にオブジェクトが複数あるかどうかを監視することができます自動的にメモリを再利用の目的を達成するために、スコープは、
Java言語は、割り当てられたメモリの解放の表示方法の操作を提供していません。
シリアルコレクター:コレクターはシングルスレッドで、それだけで、それは終わりを収集するまで、他のすべての作業スレッドを中断する必要があり、ガベージコレクションが実行され、完全なガベージコレクションに1つのCPUまたはコレクション・スレッドを使用します。
ParNewコレクター:マルチスレッド版のガベージコレクションのために、複数のスレッドを使用することに加えて、シリアル・コレクター、他のコレクタの動作とシリアルまったく同じ。
CMSコレクター:最短目標復旧時間コレクタの一時停止。:プロセスは、以下の4つのステップに分けて
初期マーキング
並行マーク
ラベル変更
同時クリア

?9.GCは、第1のデータやスタックのデータヒープをクリーンアップします
A:一般的な店のヒープは、このような新しいXXXを呼び出すよう、作成したオブジェクトを
スタックに保存されている一般的にローカル変数である
スタックはスレッドプライベート、およびヒープデータでありますこれは、共有されています。
データヒープにのみ関心GCは、それがヒープにリアルタイムで監視対象となります

?10.JVMガベージコレクションアルゴリズムの
マーク-スイープアルゴリズム:ラベルが完了した後、すべてのオブジェクトを統一まず必要性が回復されるオブジェクトは、回復をマークされています。
複製アルゴリズム:使用可能なメモリ容量によっては、二つの等しいサイズに分割され、唯一それらの1つを使用します。1は、メモリが不足すると、また、別の部分の上に維持するメモリ空間で使用された後、その後一掃します。
マーク-アルゴリズム並べ替え:ラベリング処理と「マーク-スイープ」アルゴリズムは同じですが、その後の工程は、直接クリーンアップするオブジェクトをリサイクルしますが、移動の終わりに、そして直接外部メモリ末端境界出て、その後きれいにされていません。
世代別コレクションアルゴリズム:Javaヒープは、一般的に、各時代の特徴に基づいて、最も適切な収集方法を使用して、古いものと新しい世代のに分かれています。多数のオブジェクトの新しい世代は、レプリケーションアルゴリズムの選択を死亡していることが分かりました。回復するアルゴリズム-または「仕上げマーク」 -理由はオブジェクトの高い生存率の古い時代には、あなたが「クリーンアップマーク」を使用しなければなりません。

?11.JVM共通の起動パラメータ
-Xms / -Xmx -初期ヒープサイズ/最大ヒープサイズ
-Xmn -若い世代のヒープサイズ
-XX:-DisableExplicitGC -にSystem.gc()が任意の効果はありませんしましょう
-XXを: + PrintGCDetails -のGCプリント詳細
-XX:+ PrintGCDateStamps -スタンプ印刷操作GC
-XX:NewSizeパラメータ/ XX:MaxNewSize -セット新世代サイズ/最大サイズ新生代
-XX:NewRatioは、 -提供され、新世代の古い世代もよいです割合
-XX: - PrintTenuringDistributionは、新世代のGCの配信後、公園内の生存者の各出力対象年齢を設定
:InitialTenuringThreshold / -XX:MaxTenuringThreshold:-XX歳の初期値を設定し、最大しきい値
-XX:TargetSurvivorRatio:セットは生き残りましたターゲット利用ゾーン

作成12.Javaオブジェクト?
ここに画像を挿入説明
ステップ1:クラスのロードを確認し
、このコマンドのパラメータは定数プール参照で、このクラスのシンボルを見つけ、代わってこのシンボリック参照をチェックすることができるかどうかを確認する最初の、命令に新しい仮想機会をクラスを介して、それは、ロードされ解析され、初期化されているかどうか。ない場合は、適切なクラスのロード処理を実行する必要があります。

ステップ2:メモリを割り当て
、仮想マシンは、オブジェクト割り当てメモリを新生児なり、クラスローダによって検査した後。オブジェクトは、クラスがロードされた後のメモリサイズを決定することができる必要に応じて、タスク・オブジェクトに割り当てられた領域を切り出しJavaヒープからメモリの一部のサイズを決定することと等価です。配布「ポインタの衝突」と「フリーリスト」の2種類があり、通常のJavaヒープヒープは、構造化するかどうかを判断するJavaのかどうか分布の種類を選択し、または圧縮機能を整理することを決めずにガベージコレクタによって使用されます。

:2つの方法でメモリ割り当て
、通常のJavaヒープメモリかどうかに応じて、以上の二つの方法を選択するための1。(とも呼ばれる「マーク-圧縮」)「 - -スイープマーク」や「仕上げマーク」と通常のJavaヒープメモリならば、GCコレクタアルゴリズムによっては、それはメモリが複製アルゴリズム構成されていることは注目に値するがあります

メモリ割り当ての同時実行の問題
のオブジェクトを作成するときに、実際の開発プロセスでは、オブジェクトを作成することは非常に頻繁なものであるため、スレッドセーフである非常に重要な問題は、仮想マシンとして、スレッドの安全性が通常であることを確認する必要があり、そこにありますスレッドの安全性を確保するための2つの方法で使用する仮想マシンの観点から:

STEP3:ゼロの初期値
メモリ割り当てが完了した後、仮想マシンのメモリ空間を割り当てる必要は(オブジェクトヘッダを含まない)がゼロの値に初期化され、オブジェクトのインスタンスフィールドは、Javaコードに初期値が割り当てられないことが、このステップ性を保証直接、プログラムは、これらのフィールドに対応するゼロ値にデータ型にアクセスすることができます。

STEP4:オブジェクトヘッドを設定し
、ゼロ値の初期化が完了した後、仮想マシンが必要な設定が適用され、例えば、このオブジェクトは、メタデータ、オブジェクトのハッシュコード、GC世代オブジェクトのような情報を検索する方法、そのクラスのインスタンスであります年齢やその他の情報。この情報は、オブジェクトヘッダに格納されています。加えて、このようなバイアスロックを有効にするかどうかなど、仮想マシンの現在の動作状態に応じて、ヘッド・オブジェクトは、異なるセットを有しています。

ステップ5:のinitメソッド
上記の作業が完了した後、ビューの仮想マシンのポイントの視点から、新しいオブジェクトが作成されましたが、ビューのJavaプログラミングポイントの観点から、オブジェクトの作成が始まったばかり、この方法は、すべてのフィールドを行われていませんまだゼロ。だから、一般的には、方法の実行後に新たな命令が次にプログラマの希望に応じて、オブジェクトを初期化するために、実行され、そのようなオブジェクトは、真に完全に利用できると考え出現します。

公開された99元の記事 ウォンの賞賛2 ビュー2632

おすすめ

転載: blog.csdn.net/weixin_41588751/article/details/104885340