「五分一日、JVM楽しい」:オブジェクトはから来ます

オブジェクト指向

我々はすべて知っているように、Javaはオブジェクト指向のハイレベルなプログラミング言語なので、今の質問は、対象物から来るんですか?一部の人々は、オブジェクトを作成するために、新しいキーワードで言うと、JVMが行われているものを私たちに与えただけでなく、この記事では、我々は新しいプロセスオブジェクトに復号化されます、と述べました。

しかし、どこへ行く、行くところ

オブジェクトの誕生は、一般的に、我々は、このクラスのオブジェクトを取得するには、クラスをインスタンス化する新しいキーワードを使用している、クラスのロードプロセスが初期化プロセスのシリーズを解決するために、一連のチェックを受けることになる、クラスを持っている必要があります我々は、後に詳細に説明し、我々は唯一のオブジェクトを気ステップ、一歩ます。

次のオブジェクトは、ヒープメモリにロードされ、私たちの仮想マシンのメモリヒープメモリにロードされるオブジェクトが、その後どこでこのスペースを行くと、一定のスペースを必要とすることを意味?ここでは、JVMの仕様では、2つのシナリオを提示し:

ポインタ衝突

いわゆるポインタ衝突、JVMのヒープメモリの条件を提供し、絶対にきれいで、ポインタとしてフリースペースと「軍事境界線」ポインタの衝突が一般エデンエリアで発生し、エデンで作成された最後のトラックの使用スペースの真ん中を分割オブジェクト、オブジェクトは、エデンの上部に配置されます。十分なスペースのオブジェクトがある場合はエデンで作成され、最上部に配置され、その後、ポインタを上に移動(あなたがテトリスをプレイした場合、あなたは理解しておく必要があり、その白は非排除絶対に通常のテトリスですテトリスが満たされたときに)、それはマイナーGC(GCの知識をトリガーする、我々は後に説明する必要があります)

比喩的に言えば、クラスは座席をたくさん持っている、学生が順番に座っているので、唯一の学生が次の生徒がどこに座って知っているだろうに座って来た中で、最後の1を知っておく必要があり、スペースがない〜

画像-20190819215012007

シングルスレッドの場合、私たちが使うには問題ありませんが、マルチスレッドの場合には、宇宙障害が発生割り当てられます場合は、比喩的に言えば、同時に二人の位置を販売することですこのような状況は避けられない、その場合には、我々はこの問題を解決するために2つのアプローチを取ることができ、戦うことになります。

  • アトミック更新操作を再試行CAS +保証の失敗を使用してください

CAS(コンペア・アンド・スワップ)、キーが3つのオペランドです。

メモリ値V

Aの旧期待値

新しい値Bを変更するには

そしてAとVの期待値が同じメモリ値である場合にのみ場合は、メモリ値VはBに修正、または何もしません。

画像-20190819222536824

  • それはTLABに来るとき、私たちの最後のレッスンと組み合わせて第2のアプローチは、各スレッドTLABにメモリを割り当てる場合、時間割り当てがゼロ値に初期化することができる領域、(ローカル割り当てバッファスレッド)を割り当て、実装されます1つのステップは、値のないオブジェクトのインスタンスフィールドはJavaコードで直接使用することができることを確実にします。

    画像-20190819223452177

無料一覧

(学生にたけていない)ヒープメモリ不規則な状況は、JVMがクラスの生徒に(未使用のメモリを)来ない小さな本を、覚えているとき、別のケースである場合に、新しい学生(新しいオブジェクト)クラスに来て、あなたは座席配置の学生に帳簿上のシートマップを見ることができます -

フリーリスト(フリー・リスト)と呼ばれるJVM小さな本。

エピローグ

ここでは、仮想マシンのために、オブジェクトが自分の席を見つけて座っていたが、次の、我々はどのようなオブジェクトを説明する必要があります。

いいえ公共ありません

おすすめ

転載: www.cnblogs.com/viyoung/p/11456892.html