newキーワードに何のシリーズ(二)オブジェクト割り当てが発生しましたか


前言
newキーワードがインスタンス化するオブジェクトが必要なクラス情報を見つけたら、メモリにオブジェクトインスタンスを割り当てることができます.(ここではJavaメモリ構造について説明します)
0 x 01メモリ割付
newキーを使用すると、クラスの新しいオブジェクトインスタンスが作成されます.オブジェクトインスタンスを作成するには、オブジェクトインスタンスを格納する場所が必要です.このオブジェクトインスタンスにメモリにスペースを割り当てる必要があります
質問:メモリのどこに割り当てますか?
   Java        

質問:どのように割り当てますか?
              ,            ,             。
    :                        
    :        ,               (                ,   minor gc,     full gc)
        Java                 

ここでは、Javaメモリ構造、ゴミ収集アルゴリズム(ゴミ回収方法)、ゴミ収集器について説明します.
全体的なプロセス:クラス情報のロード-"メモリ割り当て-"オブジェクトインスタンス情報の初期化(initメソッド、すなわちコンストラクタ)
0 x 02スレッドセキュリティの問題
質問:スレッドセキュリティの問題はなぜ発生しますか?
        ,            。       ,                   。
        ?  Java                 (    )

解決方法1:CASに失敗した再試行方式を採用して更新操作の原子性解決方式を保証する2:TLAB方式:各スレッドはスタックの中で予め1段のメモリを割り当てて、使い終わったら再分配して、TLABが使い終わって再分配してやっとロックをかけることができる
0 x 03オブジェクトのメモリレイアウト
オブジェクトがメモリに格納するレイアウト:オブジェクトヘッダ、インスタンスデータ、整列塗り
≪オブジェクト・ヘッダ|Object Header|oem_src≫:ハッシュ・コード、GC世代別年齢、ロック・ステータス・フラグなどのオブジェクト自体のランタイム・データを格納する+タイプのポインタ(このポインタによってこのオブジェクトがどのクラス・インスタンスであるかを決定する)インスタンス・データ:オブジェクトが本当に意味のあるデータの整列:必ずしも存在しない、特に意味がない
0 x 04オブジェクトのアクセス先
ハンドルの使用:スタックポインタはスタック内のハンドルプールを指し、ハンドルプールはオブジェクトインスタンスを指すポインタを維持します.
直接参照ちょくせつさんしょう:スタックポインタがスタック内のオブジェクトインスタンスを直接指します
0 xFFまとめ
オブジェクトの割り当ては実はとても簡単で、対応するクラスの情報を見つけて、メモリを割り当てて、いくつかjvmの規定の情報を設定します.しかし、異なるjvm仮想マシンの実装は異なるため、異なるメカニズムで実装されます.この段階で.オブジェクトインスタンスの割り当てはメモリに必要であるため、javaメモリ構造はjvmのより良い (メモリの割り当て、メモリの回収)を容易にするため、javaメモリ構造を理解する必要があります.そこでごみ収集アルゴリズムとごみ収集器(ごみ収集アルゴリズムの集団実現)も引き出された.